Shell – Is it possible to create sticky redirection from stdout/stderr

io-redirectionshell-scriptstderrstdout

Consider such code:

echo hello >> log.txt
echo world >> log.txt

I execute command with stdout redirection. Is it possible to create sticky redirection? Something like this:

redir stdout log.txt
echo hello
echo world
stop-redir

This would be equivalent to the first piece code.

What I really need — make such sticky redirection for stdout and stderr (at the same time), execute some commands, stop redirection, and read log file.

Best Answer

exec 3>&1 4>&2 >log.txt 2>&1
echo hello
echo world
exec 1>&3 2>&4
less log.txt

I.e.: make file descriptors 3 and 4 copies of the current 1 (stdout) and 2 (stderr), redirect 1 to log.txt and 2 to the same as 1; then perform commands; then restore stdout and stderr from the saved values in file descriptors 3 and 4.

Related Question