この構造を理解するのに少し困難がありますprog > file 2>&1
。 「送る」という意味で読んだ。標準出力そして標準エラーしかし、私の質問はどうですか?
私が知っているようにprog > file
基本的に送るのは標準出力アーカイブ。私もこれが何を意味するprog 2>&1
のか理解しています標準エラーに送らなければならない標準出力。ただし、点を結ぶことはできません prog > file 2>&1
。ここで専門家が解読するのに役立ちますか?
答え1
左から右に読むだけです。
> file
-->すべてをからにリダイレクトしますstdout
。 (からのポイントツーポイントリンクがあると想像できますfile
)stdout
file
2>&1
-->からこれまでのすべての内容をstderr
リダイレクトstdout
しますfile
。
だから結論:
stderr --> stdout --> file
良い参考資料を確認できますここ。
答え2
あなたは何を見逃していますか?あなたはすべてを把握しているようです。> file
出力を標準出力に送信し、標準エラーを標準出力に送信しますfile
。2>&1
最終結果はstderrとstdoutの両方ですfile
。
これを説明するために、次の簡単なPerlスクリプトを検討してください。
#!/usr/bin/env perl
print STDERR "Standard Error\n";
print STDOUT "Standard Output\n";
さて、出力を見てください。
$ foo.pl ## Both error and out are printed to the terminal
Standard Error
Standard Output
$ foo.pl 2>file ## Error is redirected to file, only output is shown
Standard Output
$ foo.pl 1>file ## Output is redirected to file, only error is shown
Standard Error
$ foo.pl 1>file 2>&1 ## Everything is sent to file, nothing is shown.