bash:stderrをファイルにリダイレクトし、stdout + stderrを画面にリダイレクトします。

bash:stderrをファイルにリダイレクトし、stdout + stderrを画面にリダイレクトします。

コマンドの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に供給し、それをファイルに保存して画面に送信します。

おすすめ記事