スクリプトstderrとstdoutをファイルにリダイレクトし、stdoutもttyのままにしますか?

スクリプトstderrとstdoutをファイルにリダイレクトし、stdoutもttyのままにしますか?

私のスクリプトには現在次のものがあります。

exec > >(tee -a /tmp/history.log) 2>&1

これにより、すべてのコマンドのstderrとstdoutがログファイルとttyに書き込まれます。残念ながら、これはttyを非常にうるさくするので、端末にstdoutを置き、ファイルにstdoutとstderrの両方を置くことをお勧めします(正しい順序であるため、追加のためにファイルを2回開くと機能しません)。私は生涯にわたってtee /dev/ttyそれを操作または使用するために必要な魔法のexec呼び出しを見つけることができません。

ベストアンサー1

teeファイル記述子に直接出力することはできませんが、プロセス置換を使用して解決できますcat

exec 3>&1 &>log 1> >(tee >(cat >&3))

したがって、stdoutはfd3を介して出力に移動し、stdoutとstderrは両方ともログに移動します。

おすすめ記事