$output = `cmd 2>&1`;
$output = `cmd 2>/dev/null`;
$output = `cmd 2>&1 1>/dev/null`;
$output = `cmd 3>&1 1>&2 2>&3 3>&-`;
我不明白 3 和 4 是如何工作的,我不太确定我对 1 和 2 的理解是正确的。以下是我的理解。请纠正我的错误。
我知道
0
、 1
和 2
象征 STDIN
、 STDOUT
和 STDERR
。&
转义 1
确保 STDERR
不会被重定向到名为 1
的文件) $output = `cmd 1>/dev/null`;
另外,如果目标是在
STDERR
获取 STDOUT
消息,那么 1>/dev/null
不会将所有内容重定向到 /dev/null
吗? 3
?它像一个临时变量吗? 最佳答案
真的,这些都不是 Perl —— 所有这些都由您使用反引号操作符调用的 shell 处理。所以你最好的阅读是 man sh
或 Shell chapter of the Unix standard 。
简而言之,对于#4:
3>&1
:打开 FD 3 以指向 stdout 当前指向的位置。 1>&2
:重新打开 stdout 以指向 stderr 当前指向的位置。 2>&3
:重新打开 stderr 以指向 FD 3 当前指向的位置,即上一步完成之前 stdout 指向的位置。现在 stdout 和 stderr 已成功交换。 3>&-
:关闭 FD 3,因为不再需要它。 关于bash - 这些流重定向如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3962674/