Redirect stderr to stdout using 2>&1

2>&1 is used to redirect standard error (stderr) to standard output (stdout). It allows you to capture and handle both types of output in the same way.

File descriptors

There are 3 file descriptors, represented by numbers:

Redirection

> is used to redirect the output of a command to something else.

File descriptor

& indicates that what follows is a file descriptor (in the context of a redirection). It is required otherwise it will interpret the 1 as a filename (eg 2>1 would mean "redirect stderr to a file named 1").

Putting it together

2>&1 indicates that file descriptor 2 (stderr) should be redirected to file descriptor 1 (stdout).

Examples

command > /dev/null 2>&1

The stdout of command is redirected to /dev/null and stderr is redirected to stdout. Meaning everything is redirected to /dev/null.

cat file.txt > output.txt 2>&1

Send the content of file.txt to output.txt. If any errors (eg. file does not exist), send it to stdout which is also output.txt.

ls -l ./apps/ ./packages 2> /dev/null

List the content of ./apps and ./packages. If there was any errors (eg. directory does not exist), send stderr to /dev/null.