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 filehandle 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 # ?
The latter; it makes sure STDOUT and STDERR of the original command go to the same fd, 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.