stdout / stderrで固定リダイレクトを作成できますか?

stdout / stderrで固定リダイレクトを作成できますか?

次のコードを検討してください。

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

標準出力リダイレクトを使用してコマンドを実行します。固定リダイレクトを作成できますか?このような:

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

これは最初のコード部分と同じです。

私にとって本当に必要なのは、stdoutとstderrの固定リダイレクトを同時に実行し、いくつかのコマンドを実行し、リダイレクトを停止し、ログファイルを読み取ることです。

答え1

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

つまり、ファイルディスクリプタ3と4の現在の1(stdout)と2(stderr)のコピーを作成し、1をlog.txtに、2を1に等しくリダイレ​​クトし、ファイルディスクリプタでコマンドを実行します。 3と4で保存され、stdoutとstderrを復元します。

関連情報