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 # ?
|&is used, the standard error of command1 is connected to command2's standard input through the pipe; it is shorthand for2>&1 |. This implicit redirection of the standard error is performed after any redirections specified by the command." – PP. Nov 12 '10 at 10:08stderrandstdoutto understand this issue. The redirection>and tee|operators differs when trying to capture both output streams. For redirection I had to./testapp > /tmp/out.log 2>&1. Whereas for tee I had to./testapp 2>&1 | tee /tmp/out.log. – daparic Sep 27 '18 at 17:56|is normally referred to as a pipe operator.teerefers only to the particular program that's being invoked on the far end of the pipe. – MadHatter Sep 27 '18 at 21:19