Hi,
Note: this tip is about redirecting output to a file and the screen at the same time. The original 'hack' has been replaced by a much better solution. See the second post!
I'm leaving my 'hack' as an odd example of the many ways problems can be solved.
I justed wanted to share this neat 'hack' I figured out:
To redirect output to a file, but still see it on screen at the same time, use this construct:
Code:
#!/bin/bash
OUPUTFILE=~/output.txt
some_long_command >$OUTPUTFILE &
tail -f $OUTPUTFILE
The idea being:
You want to see the output of a command, but you also want to keep it as reference.
The code below would do this as well, but if the 'command' took a long time you'd be staring at an empty line during execution.
Code:
# this works but is not usable for commands
# that have a long execution time.
command > output_file
cat output_file
I run Gentoo Linux, and emerge's take a relatively long time, so I want to see the output to wether all is well. But in the future I might also want to read back the output to see what warnings etc it might have given.
I'm planning on writing a mother-script around 'emerge' that appears the same as the regular 'emerge' (with it's screen output), but also keeps rotating logs of the results. This construction lets me do that.
NOTES:
- I couldn't find an "output splitter" that redirects output to
two places (ie screen
and file) or that would've been better.
- Over slow network connections Tail seriously lags behind the actual running of the script, and is very 'jumpy' in its output.
- The above code is not executable, as I'm not presenting a specific situation in it. Simple examples could be easily made however.
- I hope this tip helps someone and/or interests them in scripting for themselves!