UNIX Power Tools

UNIX Power ToolsSearch this book
Previous: 8.12 Which One Will the C Shell Use? Chapter 8
How the Shell Interprets What You Type
Next: 8.14 Bourne Shell Quoting
 

8.13 Is It "2>&1 file" or "> file 2>&1"? Why?

One of the common questions about the Bourne and Korn shells is why only the second command will redirect both stdout and stderr (13.1) to a file:

$ cat food 2>&1 >file
cat: can't open food
$ cat food >file 2>&1
$

Although lots of sh manual pages don't mention this, the shell reads arguments from left to right.

  1. On the first command line, the shell sees 2>&1 first. That means "make the standard error (file descriptor 2) go to the same place as the standard output (fd1) is going." There's no effect because both fd2 and fd1 are already going to the terminal. Then >file redirects fd1 (stdout) to file. But fd2 (stderr) is still going to the terminal.

  2. On the second command line, the shell sees >file first and redirects stdout to file. Next 2>&1 sends fd2 (stderr) to the same place fd1 is going - that's to the file. And that's what you want.

Article 45.21 has much more about the m>&n operator.

- JP


Previous: 8.12 Which One Will the C Shell Use? UNIX Power ToolsNext: 8.14 Bourne Shell Quoting
8.12 Which One Will the C Shell Use? Book Index8.14 Bourne Shell Quoting

The UNIX CD Bookshelf NavigationThe UNIX CD BookshelfUNIX Power ToolsUNIX in a NutshellLearning the vi Editorsed & awkLearning the Korn ShellLearning the UNIX Operating System