Bashでリダイレクトを停止する方法

Bashでリダイレクトを停止する方法

私は使用する:

exec >script.log 2>&1

すべての出力を私のスクリプトのファイルにリダイレクトします。スクリプトが終わったら、画面にメッセージを印刷したいと思います。リダイレクトを停止する方法は?

ベストアンサー1

execもう一度呼び出して元の記述子を復元できます。どこかに保存する必要があります。

exec 3>&1 4>&2 1>script.log 2>&1
… logged portion …
exec 1>&3 2>&4
echo >&2 "Done"

記録されたセクション内から追加の記述子にリダイレクトすることで、コマンドの元の記述子を使用できます。

echo "30 seconds remaining" >&3

あるいは、スクリプトのロギング部分を複合コマンドに入れて、複合コマンドをリダイレクトすることもできます。リダイレクトセクション内の一部のトラップで元の記述子を使用したい場合、この方法は機能しません。

{
… logged portion …
} >script.log 2>&1
echo >&2 "Done"

おすすめ記事