How to stop redirection via exec
I want to redirect some output of a script to a file.
REDIRECT_FILE="foo.txt" echo to console # starting redirect exec > $REDIRECT_FILE echo to file echo ... echo ... # stop redirect exec >&- echo end of script
"end of script" should be written to stdout.
But instead there is a "Bad file descriptor" error message.
exec 1>&- does not work too.
What is the correct term to stop the redirection?
exec 1>&- closes stdout. It doesn’t revert it to the original value because you’d already replaced that with
exec > $REDIRECT_FILE (which should be
exec > "$REDIRECT_FILE" to protect the variable’s value from any further processing by by the shell).
To revert stdout to its original value you need to save it
exec 3>&1 # Save stdout as FD 3 exec 1>"$REDIRECT_FILE" # Redirect stdout to a file … exec 1>&3 # Revert stdout to its original value