Bird
Raised Fist0
Bash Scriptingscripting~20 mins

File descriptors and redirection in Bash Scripting - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
File Descriptor Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
💻 Command Output
intermediate
1:30remaining
What is the output of this redirection command?
Consider the following bash command:

echo 'Hello' 1>&2

What will be the output when you run this command in a terminal?
Bash Scripting
echo 'Hello' 1>&2
AHello printed to standard error (screen)
BHello printed to standard output (screen)
CNo output, command runs silently
DSyntax error due to incorrect redirection
Attempts:
2 left
💡 Hint
Remember that 1 is standard output and 2 is standard error.
💻 Command Output
intermediate
1:30remaining
What happens when redirecting both stdout and stderr to a file?
Given this command:

ls /nonexistent /tmp > output.txt 2>&1

What will be the content of output.txt after running it?
Bash Scripting
ls /nonexistent /tmp > output.txt 2>&1
AOnly the listing of /tmp directory is saved in output.txt
BBoth the error message and the listing of /tmp are saved in output.txt
COnly the error message about /nonexistent is saved in output.txt
Doutput.txt remains empty
Attempts:
2 left
💡 Hint
Think about what 2>&1 means after redirecting stdout.
📝 Syntax
advanced
2:00remaining
Which command correctly appends stderr to a file without affecting stdout?
You want to append only the error messages (stderr) of a command to a file named errors.log, while keeping the standard output visible on the screen. Which command does this correctly?
Acommand >> errors.log 2>&1
Bcommand > errors.log 2>> errors.log
Ccommand 2> errors.log >> output.log
Dcommand 2>> errors.log
Attempts:
2 left
💡 Hint
Appending means using >> and only redirect stderr (2).
🔧 Debug
advanced
2:00remaining
Why does this redirection command produce unexpected output?
Look at this command:

command 2>&1 > output.txt

It produces unexpected output or error. Why?
ABecause output.txt does not exist
BBecause the order of redirections is correct and should not fail
CBecause stderr is redirected to stdout before stdout is redirected to the file
DBecause 2>&1 is invalid syntax
Attempts:
2 left
💡 Hint
Order of redirections matters in bash.
🚀 Application
expert
2:30remaining
How to redirect stdout to a file and stderr to another file simultaneously?
You want to run a command so that its standard output goes to out.log and its standard error goes to err.log. Which command achieves this correctly?
Acommand > out.log 2>&1 > err.log
Bcommand 2> err.log > out.log
Ccommand > out.log 2> err.log
Dcommand > out.log 2>&1
Attempts:
2 left
💡 Hint
Use separate redirections for stdout and stderr.

Practice

(1/5)
1. Which file descriptor number represents the standard error stream in bash?
easy
A. 3
B. 1
C. 2
D. 0

Solution

  1. Step 1: Recall standard file descriptors

    Standard input is 0, standard output is 1, and standard error is 2.
  2. Step 2: Identify the error stream descriptor

    The error stream is always file descriptor 2 in bash.
  3. Final Answer:

    2 -> Option C
  4. Quick Check:

    Standard error = 2 [OK]
Hint: Remember: 0=input, 1=output, 2=error [OK]
Common Mistakes:
  • Confusing standard output (1) with error (2)
  • Thinking input (0) is error
  • Using non-standard descriptor numbers
2. Which of the following is the correct syntax to redirect standard output to a file named output.txt in bash?
easy
A. command >> output.txt 2>&1
B. command < output.txt
C. command 2> output.txt
D. command > output.txt

Solution

  1. Step 1: Understand output redirection syntax

    Using > redirects standard output (file descriptor 1) to a file, overwriting it.
  2. Step 2: Match syntax to redirect output only

    command > output.txt uses > correctly to redirect output to output.txt.
  3. Final Answer:

    command > output.txt -> Option D
  4. Quick Check:

    Output redirection uses > [OK]
Hint: Use > for output, < for input redirection [OK]
Common Mistakes:
  • Using < instead of > for output
  • Redirecting error (2>) instead of output
  • Appending (>>) when overwrite is needed
3. What will be the output of the following command if file.txt does not exist?

cat file.txt > output.txt 2>&1
medium
A. Redirects both output and error messages to output.txt
B. Creates an empty output.txt file with no error message
C. Outputs the error message to the terminal and creates output.txt
D. Throws a syntax error and does nothing

Solution

  1. Step 1: Understand redirection 2>&1

    This redirects standard error (2) to the same place as standard output (1).
  2. Step 2: Analyze command behavior when file missing

    cat tries to read file.txt, fails, and sends error to stderr, which is redirected to output.txt along with stdout.
  3. Final Answer:

    Redirects both output and error messages to output.txt -> Option A
  4. Quick Check:

    2>&1 merges error into output [OK]
Hint: 2>&1 sends errors to the same place as output [OK]
Common Mistakes:
  • Thinking error shows on terminal
  • Assuming output.txt stays empty
  • Confusing 2>&1 with separate redirections
4. Identify the error in this command that attempts to redirect only standard error to error.log:

ls -l > error.log 2>
medium
A. Output redirection > should be 1>
B. Missing filename after 2> for error redirection
C. Should use 2>&1 instead of 2>
D. Command syntax is correct

Solution

  1. Step 1: Check error redirection syntax

    Redirection 2> must be followed by a filename to redirect standard error.
  2. Step 2: Identify missing filename

    The command ends with 2> but no file is specified, causing a syntax error.
  3. Final Answer:

    Missing filename after 2> for error redirection -> Option B
  4. Quick Check:

    2> needs a target file [OK]
Hint: Always specify a file after 2> for error redirection [OK]
Common Mistakes:
  • Leaving out filename after 2>
  • Confusing 2> with 2>&1
  • Thinking > needs to be 1>
5. You want to run a script that outputs normal messages to output.log and error messages to error.log. Which command correctly achieves this?
hard
A. ./script.sh > output.log 2> error.log
B. ./script.sh 2>&1 > output.log error.log
C. ./script.sh > output.log 2>&1 error.log
D. ./script.sh > output.log &> error.log

Solution

  1. Step 1: Understand separate redirection for output and error

    To send stdout and stderr to different files, use > for stdout and 2> for stderr separately.
  2. Step 2: Analyze each option

    ./script.sh > output.log 2> error.log correctly redirects stdout to output.log and stderr to error.log. Others mix or misuse redirection syntax.
  3. Final Answer:

    ./script.sh > output.log 2> error.log -> Option A
  4. Quick Check:

    Separate > and 2> for output and error [OK]
Hint: Use > for output, 2> for errors to separate files [OK]
Common Mistakes:
  • Using &> redirects both to one file
  • Mixing order of redirections incorrectly
  • Omitting file names after redirection operators
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard