使用echo重定向文件描述符

3

为什么

echo 'foo' 1>&2 2>/dev/null

输出被重定向了吗?foo 被重定向到文件描述符 2,文件描述符 2 被重定向到 /dev/null。那么就不应该有输出了吗?

1个回答

4

本文涉及重定向的顺序问题。当bash遇到多个重定向操作时,会从左至右依次处理。

第一个stdout重定向会将其重定向到当前stderr(tty)的值。当stderr更改为/dev/null时,stdout仍会被写入stderr的先前输出(tty)。

将它们的位置互换一下,就可以解决问题。

echo 'foo' 2>/dev/null 1>&2

更多细节请参见http://www.catonmat.net/blog/bash-one-liners-explained-part-three/。这是有关bash一行代码的详细解释。

我仍然看不懂为什么。 - pfnuesel
通过这篇文章的解释,我现在理解了:http://www.catonmat.net/blog/bash-one-liners-explained-part-three/ - pfnuesel
好链接,我会将它添加到帖子中,让其他人也能找到它。 - Jocce Nilsson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接