Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Tee all output to log file?



On Wed, 2 Feb 2011, ZyX wrote:

Reply to message «Tee all output to log file?»,
sent 02:41:26 02 February 2011, Wednesday
by Benjamin R. Haskell:

Is there something straightforward that I'm overlooking? Is there a commonly used utility for this? (`script` comes to mind, but I recall klunkiness when trying it in the past.)
If you don't like script, maybe you should try screen:

   (( $+logfile )) && \
       exec screen -L -c =(echo "logfile $logfile") -m -S script-$0 $0 $@

I find `screen` even more annoying than `script` for scripting purposes, wonderful though it is for interactive use.

I really just want the redirection, not the many extra features that `screen` adds.

Adding


Does anybody know, why it does not work when I start screen in detached mode?

Cf. above annoyance. For doing something with Vim under Apache (using :TOhtml), I recently resorted to this hackery:

screen -q -d -m -S $sessionname vim -u NONE -N +'so $scriptname'
(Then, loop, waiting for one of:
1: the Vim script to touch a marker file that indicated completion
2: a specified timeout, in case something errored out, preventing a clean Vim exit
)
screen -X -S $sessionname quit



Despite my annoyance (I'm easily annoyed), I tried your above suggestion. It didn't capture stderr, so I added a flag that logging was in progress and added a redirect for it (also added '-q' to the `screen` commands):

(( $+logfile && ! $+doinglogging )) \
   && exec env doinglogging=true screen -L -c =(echo "logfile $logfile") -q -m -S script-$0 $0 $@
(( $+doinglogging )) && exec 2>&1

Seems okay for what I'm doing.

Thanks,
Ben


Messages sorted by: Reverse Date, Date, Thread, Author