コマンドのstderrストリームをログファイルに保存したいのですが、出力全体(stdout + stderr)も画面に表示したいと思います。どうすればいいですか?
私はコンソールにstdout + stderrを表示し、両方のストリームをファイルにリダイレクトするソリューションのみを見つけました。
foo | tee output.file
(https://stackoverflow.com/questions/418896/how-to-redirect-output-to-a-file-and-stdout)
しかし、stderrをログファイルにリダイレクトしたいと思います。
ベストアンサー1
最近のbashでは、プロセス置換を使用できます。
foo 2> >(tee stderr.txt)
これはちょうどteeを実行しているプログラムにstderrを送信することです。
より持ち運びに便利
exec 3>&1
foo 2>&1 >&3 | tee stderr.txt
これはファイル記述子3を現在の標準出力(つまり画面)のコピーにし、パイプを設定して実行しますfoo 2>&1 >&3
。これは、fooのstderrを現在のstdout(つまりパイプ)と同じ場所に送信し、stdoutをfd 3(生出力)に送信します。このパイプはfooの生のstderrをteeに供給し、それをファイルに保存して画面に送信します。