Friday 31 May 2019

bash - In the shell, what does " 2>&1 " mean?



In a Unix shell, if I want to combine stderr and stdout into the stdout stream for further manipulation, I can append the following on the end of my command:



2>&1


So, if I want to use head on the output from g++, I can do something like this:




g++ lots_of_errors 2>&1 | head


so I can see only the first few errors.



I always have trouble remembering this, and I constantly have to go look it up, and it is mainly because I don't fully understand the syntax of this particular trick.



Can someone break this up and explain character by character what 2>&1 means?


Answer




File descriptor 1 is the standard output (stdout).
File descriptor 2 is the standard error (stderr).



Here is one way to remember this construct (although it is not entirely accurate): at first, 2>1 may look like a good way to redirect stderr to stdout. However, it will actually be interpreted as "redirect stderr to a file named 1". & indicates that what follows is a file descriptor and not a filename. So the construct becomes: 2>&1.


No comments:

Post a Comment

php - file_get_contents shows unexpected output while reading a file

I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...