Site icon DesignLinux

How to Redirect stderr to stdout in Bash

Redirect stderr to stdout in Bash

Sometimes when you are redirecting the output of a command by piping to another command or to a file, you get the error messages. There are three standard I/O streams, which are used in Bash and other Linux shells when a program is executed.

Below are the streams and each representing by the numberic file descriptor:

Here,

Redirecting Output

Using the redirection you can easily get the output from a program to another program or a file as input.

To redirect streams you should use the n> operator, where n is the file descriptor number.

If you will not provide the value of n, by default it will set to 1. Let’s see example for the better understanding. Below given two commands are same. Both commands will redirect the command output to a file.

command > file
command 1> file

Let’s say you want to save output of the date command to a file, use below command:

date > today.txt

Use the cat command to view contain of today.txt file:

cat today.txt
Sun Dec 13 04:47:45 UTC 2020

To redirect the standard error (stderr) use the 2> operator:

command 2> file

To redirect the both standard error (stderr) and output (stdout) to two separate files using below command:

command 2> error.txt 1> output.txt

If you don’t want to show error messages on the screen, redirect stderr to /dev/null:

command 2> /dev/null

Redirecting stderr to stdout

When you want everything of program’s output in a single file, redirect the stderr to stdout.

Use the following command to redirect the stderr to stdout and error messages sent to the same file as standard output:

command > file 2>&1

Here, > file redirect the stdout to file, and 2>&1 redirect the stderr to the current location of stdout.

Ensure the order of redirection, it’s important. For instance, in the below example it redirects only stdout to file. Here the stderr is redirected to stdout before the stdout was redirected to file.

command 2>&1 > file 

You can use the &> construct instead of 2>&1, both have the same meaning in Bash.

command &> file

Conclusion

I hope you learned the concept of the redirections and file descriptors. To redirect stderr and stdout, use the 2>&1 or &> constructs. Learn more visit the bash man page

If you have any questions or feedback, feel free to leave a comment.

Exit mobile version