質問: stdoutをファイルにリダイレクトし、stdout + stderrを別のファイルにリダイレクトする方法は? どうすれば達成できますかcmd >> file1 2>&1 1>>file2 つまり、stdout and stderrは1つのファイル(file1)にリダイレクトし、stdout(file2)のみを別のファイルにリダイレクトする必要があります(両方とも追加モード)?
回答: 問題は、出力をリダイレクトすると、次のリダイレクトで使用できなくなることです。サブシェルでteeにパイプして、2番目のリダイレクトの出力を保持できます。( 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に感謝)