1

誰かがこれら2つのコードの違いを説明できますか?

bad_command 2>&  >> file.out 

bad_command >> file.out 2>& 

マニュアルによると、これら 2 つのコードは異なり、最初のコマンドは file.out に何も出力しません。

それで、ここに私の質問があります。

1/その理由は何ですか?

2/シェルで演算子の優先順位がどのように機能するかを説明するドキュメントはありますか? シェルが構文ツリーを解析して作成する方法。

3/ 正しい構文と順序は?

- 前もって感謝します -

4

1 に答える 1

3

どちらも構文的に間違っています。私はあなたが意味したと思います

bad_command 2>&1  >> file.out

bad_command >> file.out 2>&1

代わりは。

これらの間には違いがあります。リダイレクションは必須のステートメントであり、左から右に処理されます。リダイレクトは、プロセスのファイル記述子(fds)で動作します。標準ファイル記述子#0(標準入力/ stdin)、#1(標準出力/ stdout)、#2(標準エラー/ stderr)について聞いたことがあるかもしれません。

最初のコマンドラインのリダイレクトは次のようになります。「fd2をfd1のコピーにしますが、fd1を変更して'file.out'に追加します」(2番目のリダイレクトはfd 2に影響を与えません。これは、fd1のコピーです。初めにありました)

2番目の読み取り:「fd1を変更して'file.out'に追加し、fd2をfd1のコピーにします」(最初のリダイレクトは2番目のリダイレクトに影響し、ボットfdsは同じになります)

于 2012-08-24T22:46:38.173 に答える