"prog>file2>&1" デコード

"prog>file2>&1" デコード

この構造を理解するのに少し困難がありますprog > file 2>&1。 「送る」という意味で読んだ。標準出力そして標準エラーしかし、私の質問はどうですか?

私が知っているようにprog > file基本的に送るのは標準出力アーカイブ。私もこれが何を意味するprog 2>&1のか理解しています標準エラーに送らなければならない標準出力。ただし、点を結ぶことはできません prog > file 2>&1。ここで専門家が解読するのに役立ちますか?

答え1

左から右に読むだけです。

  • > file-->すべてをからにリダイレクトしますstdout。 (からのポイントツーポイントリンクがあると想像できます filestdoutfile
  • 2>&1-->からこれまでのすべての内容をstderrリダイレクトstdoutしますfile

だから結論:

stderr --> stdout --> file

良い参考資料を確認できますここ

答え2

あなたは何を見逃していますか?あなたはすべてを把握しているようです。> file出力を標準出力に送信し、標準エラーを標準出力に送信しますfile2>&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.

関連情報