最近の bash では、プロセス置換を使用できます。
foo 2> >(tee stderr.txt)
これは、tee を実行しているプログラムに stderr を送るだけです。
よりポータブル
exec 3>&1
foo 2>&1 >&3 | tee stderr.txt
これにより、ファイル記述子 3 が現在の stdout (つまり、画面) のコピーになり、パイプをセットアップして foo 2>&1 >&3
を実行します。 .これにより、foo の stderr が現在の stdout と同じ場所 (パイプ) に送信され、stdout が元の出力である fd 3 に送信されます。パイプは foo の元の stderr を tee にフィードし、tee はそれをファイルに保存して画面に送信します。