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


15

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

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   # ?

回答:


18

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


5
興味深いことに、bashのマニュアルページには、「|&使用した場合、command1の標準エラーはパイプを介してcommand2の標準入力に接続されます。これはの省略形です2>&1 |。標準エラーのこの暗黙のリダイレクトは、コマンドで指定されたリダイレクトの後に実行されます。」
PP。

私は両方を書き込み、小さなCプログラムを作成する必要がありましたstderrし、stdoutこの問題を理解すること。両方の出力ストリームをキャプチャしようとする場合、リダイレクト>およびT |演算子は異なります。リダイレクトのために私はしなければなりませんでした./testapp > /tmp/out.log 2>&1。ティーのために私はしなければならなかった./testapp 2>&1 | tee /tmp/out.log
typelogic '27

@daixtrの価値は、|通常はパイプオペレーターと呼ばれます。 teeパイプの遠端で呼び出されている特定のプログラムのみを参照します。
MadHatter、2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.