web-dev-qa-db-ja.com

stderrにティーする方法は?

stdoutstdoutの両方に出力されるようにstderrを分割したい。これはteeの仕事のように聞こえますが、構文は私を回避しています-

./script.sh | tee stderr

もちろん、実際にどのようにstderrをここで参照すべきですか?

38
djechlin
./script.sh | tee /dev/fd/2

これはOSのサポートに依存することに注意してください。これはTeeの組み込み機能ではないため、普遍的なものではありません(ただし、MacOS、Linux、Solaris、FreeBSD、おそらくその他でも機能します)。

39
Nicholas Wilson

インタラクティブシェルと非インタラクティブシェルの両方で機能する、私が見つけた唯一のクロスプラットフォームの方法は次のとおりです。

command | tee >(cat 1>&2)

Teeの引数は、ファイルまたはファイルハンドルです。 プロセス置換 を使用して、出力をプロセスに送信します。プロセス= cat =では、stdoutをstderrにリダイレクトします。シェル(bash/ksh)は、1および2のファイル記述子の設定を担当します。

53
brianegge