77

I'm unclear what the best order is to capture both STDERR and STDOUT to the same file using tee. I know that if I want to pipe to a file I have to map the file handle after the redirect, i.e.,

find . >/tmp/output.txt 2>&1

This instructs the shell to send STDOUT to /tmp/output.txt and then to send STDERR to STDOUT (which is now sending to /tmp/output.txt).

Attempting to perform the 2>&1 before redirecting the file will not have the desired effect.

However, when I want to pipe using tee should it be:

find . |tee /tmp/output.txt 2>&1   # or
find . 2>&1 |tee /tmp/output.txt   # ?
PP.
  • 3,606

1 Answers1

82

The latter (find . 2>&1 | tee /tmp/output.txt); it makes sure STDOUT and STDERR of the original command go to the same fd, and then feeds them jointly into tee. In the former case, it's the STDERR of the tee command that you'd be joining with its STDOUT.

MadHatter
  • 81,580