2>&1> output.logと2>&1 teeoutput.logの違い|

2>&1> output.logと2>&1 teeoutput.logの違い|

次の2つのコマンドの違いを知りたい

2>&1 > output.log 

そして

2>&1 | tee output.log

私は同僚の1人がリダイレクトに2番目のオプションを使用しているのを見ました。 2>&1が何であるかを知っています。唯一の質問は、teeを使用する目的が何であるかです。 ">"演算子を使用して簡単なリダイレクトを実行できますか?

ベストアンサー1

2つのコマンドをそれぞれ見てください。

utility 2>&1 >output.log 

ここでリダイレクトは左から右に処理されるため、標準エラーストリームは最初に標準出力ストリームがある場所(おそらくコンソール)にリダイレクトされ、次に標準出力ストリームがファイルにリダイレクトされます。標準エラーストリームはいいえこのファイルにリダイレクトされます。

これの明白な効果は、標準エラーによって生成された内容とファイルの標準出力によって生成された内容を画面に表示できることです。

utility 2>&1 | tee output.log

ここで、標準エラーを標準出力ストリームと同じ場所にリダイレクトします。これは意味する両方teeストリームは単一の混合出力ストリームとしてユーティリティにパイプされ、対応するstdoutteeデータはteeコンソールからも再生成されます(これはteeデータストリームを直接コピーすることです)。

どちらを使用するかは、達成する目標によって異なります。

標準出力とエラーがファイルに保存されるものを>組み合わせる(as in)を使用して2番目のパイプの効果を再現することはできません。コンソールファイルと出力ファイルからデータをインポートするには、それを使用する必要があります。utility >output.log 2>&1output.logtee


その他の注意:

これ見える最初の命令の効果、

utility 2>&1 >output.log 

同じだろう

utility >output.log

つまり、標準出力はファイルに移動し、標準エラーはコンソールに移動します。

上記の各コマンドの最後に追加の処理ステップを追加すると、大きな違いがあります。

utility 2>&1 >output.log | more_stuff

utility >output.log      | more_stuff

最初のパイプラインではmore_stuff初期標準エラーストリームを標準入力データにインポートしますがutility、2番目のパイプラインではパイプを介して送信された結果の標準出力ストリームにすぎないため、more_stuffパイプラインの一部は何も得られません。標準読み取り入力。

おすすめ記事