我在理解这个结构时遇到一些困难prog > file 2>&1
。我读到它的意思是“发送标准输出和标准错误但我的问题是如何?
据我了解,prog > file
基本上发送标准输出归档。我也明白这prog 2>&1
意味着标准错误应发送至标准输出。但我无法将这些点连接起来 prog > file 2>&1
。这里的专家可以帮我解码一下吗?
答案1
您只需从左到右阅读即可:
> file
--> 将所有内容从 重定向stdout
到。(你可以想象你有一个从到 的file
点对点链接)stdout
file
2>&1
--> 将所有内容从stderr
to重定向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.