Using tee to create a log
Wayne Conrad
plug-discuss@lists.PLUG.phoenix.az.us
26 Jul 2001 13:55:22 -0700
On Thu, 26 July 2001, Alan Dayley wrote:
> At 11:56 AM 7/26/01 -0700, you wrote:
> >If foo writes to stderr as well as stdout, some lines won't get captured
> to the file (you'll see them scrolling by). If that happens and you want
> to capture those lines too, try this:
> > foo &>logfile
>
> This one did it. I had tried ">" but it did not capture anything. I did
> not know about the "&>" to capture stderr. Evidently this program spits
> everything to stderr.
Cool! I'm glad it worked.
Some follow-on noise, if you wanted to know more...
If you wanted to use tee with your program that writes to stderr, then you'd do this:
foo 2>&1 | tee logfile
This runs foo, redirecing foo's stderr to stdout so that it gets piped normally. Then we pipe stdout to tee; tee writes everything it reads to the file and writes it to standard-out.
Add "2>&1" to your bag of tricks, along with "&>". You'll use it often.
"&>" is really a shorthand for "2>&1 >". These two commands do the same thing:
foo &> logfile # bash-specific shorthand for...
foo 2>&1 > logfile # this, which works in both bash and ksh
I hope this isn't too much (or too confusing).
Wayne