解码“prog>文件2>&1”

解码“prog>文件2>&1”

我在理解这个结构时遇到一些困难prog > file 2>&1。我读到它的意思是“发送标准输出标准错误但我的问题是如何?

据我了解,prog > file基本上发送标准输出归档。我也明白这prog 2>&1意味着标准错误应发送至标准输出。但我无法将这些点连接起来 prog > file 2>&1。这里的专家可以帮我解码一下吗?

答案1

您只需从左到右阅读即可:

  • > file--> 将所有内容从 重定向stdout到。(你可以想象你有一个从到 的 file点对点链接)stdoutfile
  • 2>&1--> 将所有内容从stderrto重定向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.

相关内容