stdoutとstderrをファイルにリダイレクトするには:
curl 'https://example.com' > myfile 2>&1
これはうまくいきますが、なぜstderrをstdoutにリダイレクトするのは最後になされるべきですか?
なぜできないのですか?
curl 'https://example.com' 2>&1 > myfile
この回避策が機能しない理由は理解できません。 stderrをファイルにリダイレクトしません。左から右に読む:「Webページのダウンロード、stderrをstdoutにリダイレクト、stdoutをファイルにリダイレクト」ですが、これは明らかにBashがコマンドを解釈する方法ではありません。 Bashが2>&1
最後に来ると予想されます。なぜ2>&1
一番最後に入れなければならないのでしょうか?
答え1
私を信じてください。私は長い間この質問を受けました。今私はそれを簡単な言葉で覚えています。
ここでの意味fd
はですfile descriptor
。
2番目のケースでは、以前にあった場所をfd2
指します。fd1
それからfd2
他の場所を指します。
理解しやすくするには、次の点を考慮してください。
fd1 --> stdout
2>&1, means fd2 --> stdout
then >some_file means fd1 --> some_file
fd2
したがって、従うのでfd1
はなく、目標に従うことですfd1
。