stdoutをあるファイルにリダイレクトし、stdout + stderrを別のファイルにリダイレクトする方法は?

stdoutをあるファイルにリダイレクトし、stdout + stderrを別のファイルにリダイレクトする方法は?

どうやって達成できますか?

cmd >> file1 2>&1 1>>file2

つまり、標準出力そしてstderrは1つのファイル(ファイル1)にリダイレクトする必要があり、stdout(ファイル2)のみを別のファイルにリダイレクトする必要があります(どちらも追加モードで)。

ベストアンサー1

問題は、出力をリダイレクトするときに次のリダイレクトに使用できなくなることです。tee2番目のリダイレクトの出力を維持するために、サブシェルでパイプを使用できます。

( cmd | tee -a file2 ) >> file1 2>&1

または、端末から出力を表示するには、次の手順を実行します。

( cmd | tee -a file2 ) 2>&1 | tee -a file1

teeに最初のstderrを追加したくない場合は、file1コマンドのstderrをいくつかのファイル記述子(例:3)にリダイレクトし、それをstdoutに再度追加する必要があります。

( 2>&3 cmd | tee -a file2 ) >> file1 3>&1
# or
( 2>&3 cmd | tee -a file2 ) 3>&1 | tee -a file1

(@fra-sanに感謝します)

おすすめ記事