从this perldoc page,这些流重定向如何工作?
要捕获一个命令的STDERR和STDOUT在一起:
$output = `cmd 2>&1`;
要捕获一个命令的标准输出,但是却丢弃其STDERR:
$output = `cmd 2>/dev/null`;
要捕获命令的STDERR,但放弃其STDOUT(订购在这里很重要):
$output = `cmd 2>&1 1>/dev/null`;
,以便捕捉到STDERR但离开其STDOUT走出来交换命令的STDOUT和STDERR老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并不是相关的问题。 – 2010-10-18 19:50:28
@bemace:我的错误 – skaffman 2010-10-18 19:52:43