【发布时间】:2011-04-27 03:14:05
【问题描述】:
-
同时捕获命令的 STDERR 和 STDOUT:
$output = `cmd 2>&1`;
-
捕获命令的 STDOUT 但丢弃其 STDERR:
$output = `cmd 2>/dev/null`;
-
捕获命令的 STDERR 但丢弃其 STDOUT(此处排序很重要):
$output = `cmd 2>&1 1>/dev/null`;
-
交换命令的 STDOUT 和 STDERR 以捕获 STDERR,但将其 STDOUT 保留为旧的 STDERR:
$output = `cmd 3>&1 1>&2 2>&3 3>&-`;
我不明白 3 和 4 是如何工作的,我不太确定我对 1 和 2 的理解是否正确。以下是我的理解。请纠正我的错误。
我知道0、1和2象征着STDIN、STDOUT和STDERR。
将 2 重定向到 1,以便它们现在都使用相同的流(
&转义1确保STDERR不会被重定向到名为1的文件)将 2 (STDERR) 重定向到空流,使其被丢弃
-
我不明白这个。不应该只是
$output = `cmd 1>/dev/null`;
另外,如果目标是在
STDOUT获取STDERR消息,1>/dev/null不会将所有内容重定向到/dev/null? 这里发生了什么?什么是流
3?是不是像临时变量?
【问题讨论】:
-
@skaffman - 为什么要重新添加 perl 标签? perl 的提及与问题无关。
标签: bash shell io-redirection