このコマンドは何をしますか?コマンドの開始と終了からのリダイレクト

このコマンドは何をしますか?コマンドの開始と終了からのリダイレクト

次のコマンドがあります。

2>&1 compiler \
    --flag1 \
    --flag2 \
    --option X=10 \
    build \
    2>&1 | tee -a output.log

この動作が何であるかよくわかりません。重複したり不要な動作ですか?

stderrで印刷するために最初にリダイレクトを使用しました。

>&2 echo "Diagnostic Title"

確認中ですが、少し難しいですが、コマンド仕様の開始と終了は表示されません。

助けてくれてありがとう!

ベストアンサー1

覚えておくべきこと:

  • リダイレクトはコマンドのどこにでも表示できます。
  • リダイレクトは左から右に処理されます(ただし、パイプラインが設定された後にのみ)。

これら 2 つのポイントを考慮すると、最初のポイントが stdout が現在指しているエントリに stderr をリダイレクトすることがわかります。 (ここにパイプがあります。)その後、2番目のパイプも同じことをします。標準出力後その間何も変わらなかった、2番目のリダイレクトは実際に重複しています。

また、これは非常に重要な点であり、ここでかなり一般的な質問ソースです。

  • リダイレクト処理済み今後実際、コマンドは次のように呼び出されます。

    sed 'some sed program' myfile > myfile
    

    私のファイルを切り取る最初次に、処理する長さ0の入力ファイルを含むsedを起動します。

これ受け入れられた回答@Kusalanandaが指摘した関連質問はより深くなります。

おすすめ記事