web-dev-qa-db-ja.com

Teeを使用してSTDERRおよびSTDOUTをファイルにキャプチャする

STDERRを使用してSTDOUTteeの両方を同じファイルにキャプチャするのに最適な順序はわかりません。私がファイルにパイプしたい場合、リダイレクト後にファイルハンドルをマップする必要があることを知っています。

find . >/tmp/output.txt 2>&1

これは、シェルにSTDOUT/tmp/output.txtに送信し、次にSTDERRSTDOUTに送信するように指示します(現在は/tmp/output.txtに送信中です)。

ファイルをリダイレクトする前に2>&1を実行しようとすると、望ましい効果が得られません。

ただし、teeを使用してパイプしたい場合は、次のようにする必要があります。

find . |tee /tmp/output.txt 2>&1   # or
find . 2>&1 |tee /tmp/output.txt   # ?
14
PP.

後者;これは、元のコマンドのSTDOUTとSTDERRが同じfdに移動するようにし、それらを一緒にTに送ります。前者の場合、STDOUTと結合するのはteeコマンドのSTDERRです。

16
MadHatter