次の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>&1
output.log
tee
その他の注意:
これ見える最初の命令の効果、
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
パイプラインの一部は何も得られません。標準読み取り入力。