📖 Scenario: You are writing a simple bash script to run commands and log any errors that happen during execution. Proper error logging helps you find and fix problems quickly.
🎯 Goal: Build a bash script that runs a command, captures errors, and writes error messages to a log file with timestamps.
📋 What You'll Learn
Create a variable to hold the log file path
Create a function to log errors with timestamps
Run a command and capture any error output
Use the error logging function to write errors to the log file
Print a message indicating if the command succeeded or failed
💡 Why This Matters
🌍 Real World
Error logging is essential in scripts that automate tasks, so you can quickly find and fix problems without manually checking outputs.
💼 Career
DevOps engineers and system administrators use error logging patterns to maintain reliable automation scripts and troubleshoot issues efficiently.
Progress0 / 4 steps
1
Create a log file variable
Create a variable called LOG_FILE and set it to "error.log" to store the error log filename.
Bash Scripting
Hint
Use = to assign the string "error.log" to the variable LOG_FILE.
2
Create an error logging function
Create a function called log_error that takes one argument message. Inside the function, append the current date and time followed by the message to the file stored in LOG_FILE. Use date +"%Y-%m-%d %H:%M:%S" to get the timestamp.
Bash Scripting
Hint
Define the function with log_error() { ... }. Use echo with date and append to $LOG_FILE using >>.
3
Run a command and capture errors
Run the command ls /nonexistent_directory and redirect its error output to a variable called error_output. Use command substitution with $( ... ) and redirect standard error with 2>&1.
Bash Scripting
Hint
Use $(ls /nonexistent_directory 2>&1) to capture error output into error_output.
4
Log errors and print result
Check if error_output is not empty. If it has content, call log_error with error_output as argument and print "Command failed, error logged.". Otherwise, print "Command succeeded.".
Bash Scripting
Hint
Use if [ -n "$error_output" ] to check if the variable is not empty.
Practice
(1/5)
1. What does the 2> operator do in a bash script?
easy
A. Redirects error messages to a file
B. Redirects standard output to a file
C. Appends output to a file
D. Runs a command in the background
Solution
Step 1: Understand bash output streams
Bash has two main output streams: standard output (1) and standard error (2).
Step 2: Identify the meaning of 2>
The operator 2> redirects the standard error stream to a file or location.
Final Answer:
Redirects error messages to a file -> Option A
Quick Check:
2> means error redirect [OK]
Hint: Remember 2 is error stream, so 2> redirects errors [OK]
Common Mistakes:
Confusing 2> with > which redirects standard output
Thinking 2> appends instead of overwriting
Assuming 2> runs commands in background
2. Which of the following is the correct syntax to redirect only error messages (overwriting the file) to a file named error.log?
easy
A. command > error.log
B. command 2>> error.log
C. command &> error.log
D. command 2> error.log
Solution
Step 1: Understand redirection operators
2> redirects standard error and overwrites the file; 2>> appends errors.
Step 2: Match requirement to syntax
We want to redirect only errors and overwrite the file, so 2> error.log is correct.
Final Answer:
command 2> error.log -> Option D
Quick Check:
Use 2> for error overwrite [OK]
Hint: Use 2> to overwrite error file, 2>> to append [OK]
Common Mistakes:
Using > which redirects standard output, not errors
Using &> which redirects both output and errors
Confusing append (>>) with overwrite (>)
3. What will be the output of the following command if script.sh prints "Success" to standard output and "Error occurred" to standard error?
./script.sh > output.log 2> error.log
medium
A. "Success" is saved in output.log, "Error occurred" in error.log
B. Both messages saved in output.log
C. Both messages appear on the terminal
D. "Error occurred" saved in output.log, "Success" in error.log
Solution
Step 1: Analyze redirection operators
> output.log redirects standard output to output.log, 2> error.log redirects standard error to error.log.
Step 2: Match outputs to files
"Success" goes to standard output, so saved in output.log; "Error occurred" goes to standard error, saved in error.log.
Final Answer:
"Success" is saved in output.log, "Error occurred" in error.log -> Option A
Quick Check:
Separate output and error files [OK]
Hint: Use > for output, 2> for errors to separate logs [OK]
Common Mistakes:
Assuming both outputs go to same file
Confusing 2> with >
Expecting output on terminal despite redirection
4. Identify the error in this command intended to redirect errors to errors.log:
command 2>2 errors.log
medium
A. Should use &> instead of 2>
B. Missing space between command and 2>
C. Extra '2' causes errors to be redirected to file named '2' instead of 'errors.log'
D. No error, command is correct
Solution
Step 1: Examine the redirection syntax
The correct syntax to redirect errors is 2> filename. Here, 2>2 errors.log redirects stderr to file 2, treating errors.log as a command argument.
Step 2: Identify the cause of error
The extra '2' makes the filename 2 instead of errors.log.
Final Answer:
Extra '2' causes errors to be redirected to file named '2' instead of 'errors.log' -> Option C
Quick Check:
2> must be followed by correct filename [OK]
Hint: Check redirection target filename after 2> [OK]
Common Mistakes:
Adding extra numbers or symbols in filename position
Confusing &> with 2>
Missing spaces causing parsing errors
5. You want to run a script and save both standard output and error messages into separate files, but also keep the error messages appended (not overwritten). Which command achieves this?
hard
A. ./script.sh > output.log 2> error.log
B. ./script.sh > output.log 2>> error.log
C. ./script.sh &> output.log
D. ./script.sh >> output.log 2> error.log
Solution
Step 1: Understand output and error redirection
> overwrites standard output, 2>> appends standard error to a file.
Step 2: Match requirement to command
We want output overwritten in output.log and errors appended in error.log, so ./script.sh > output.log 2>> error.log fits.
Final Answer:
./script.sh > output.log 2>> error.log -> Option B
Quick Check:
Use 2>> to append errors [OK]
Hint: Use 2>> to append errors, > to overwrite output [OK]
Common Mistakes:
Using 2> which overwrites error file
Using &> which merges output and errors
Appending output but overwriting errors
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.