[clug] Next in my series of "how to do things in /bin/sh that you probably shouldn't".

David Deaves David.Deaves at dd.id.au
Thu Aug 20 06:32:36 MDT 2009

> > Not that I've tried it, but using process substitution to get bash to
> > automatically do the pipe magic might work?
> >
> >    exec > >(tee logfile.txt) 2>&1
> Hrm, this certainly works as a bash script but the prompt is ahead of
> itself after running it?  I suspect as the script finishes and the
> prompt is returned before the tee is. I'd have to add a wait on the
> tee (presuming I can get its PID) at the end I would guess.
> Still a whole lot shorter!

Those bash process substitutions can do some pretty cool thing, but they
are a bit strange.  "$!" will get the PID of the process, however you cannot
wait on it with or without the PID argument.  Recently I worked around it with:
  while kill -0 $sub_proc_pid
    sleep 1
and had to pass status through a file.

But a simpler solution to the above problem is :

exec > >(tee logfile.txt) 2>&1

   do stuff


exec >/dev/null 2>&1	# Close the inputs to the tee
sleep 2			# Yield and give tee some time to wrap up

exit $rc

Dave !

More information about the linux mailing list