execによるリダイレクトを停止する方法

execによるリダイレクトを停止する方法

スクリプトのいくつかの出力をファイルにリダイレクトしたいと思います。

REDIRECT_FILE="foo.txt"

echo to console

# starting redirect
exec > $REDIRECT_FILE

echo to file
echo ...
echo ...

# stop redirect
exec >&-

echo end of script

「スクリプトの終わり」は標準出力に書き込む必要があります。ところで、「無効なファイル記述子」エラーメッセージが表示されました。

exec 1>&-動作しません。

リダイレクトを停止するための正しい用語は何ですか?

答え1

exec 1>&-閉じる標準出力。置き換えた後は元の値に復元されませんexec > $REDIRECT_FILE(これはexec > "$REDIRECT_FILE"シェルの追加処理から変数値を保護するためのものです)。

また覆う標準出力元の値を保存する必要があります。

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

関連情報