一起捕获命令的 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:
$输出=`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`;
此外,如果目标是在 获取
STDERR
消息STDOUT
,不会1>/dev/null
将所有内容重定向到/dev/null
?这里发生了什么?什么是流
3
?它像一个临时变量吗?