为什么
echo 'foo' 1>&2 2>/dev/null
输出被重定向了吗?foo
被重定向到文件描述符 2,文件描述符 2 被重定向到 /dev/null
。那么就不应该有输出了吗?
为什么
echo 'foo' 1>&2 2>/dev/null
输出被重定向了吗?foo
被重定向到文件描述符 2,文件描述符 2 被重定向到 /dev/null
。那么就不应该有输出了吗?
本文涉及重定向的顺序问题。当bash遇到多个重定向操作时,会从左至右依次处理。
第一个stdout重定向会将其重定向到当前stderr(tty)的值。当stderr更改为/dev/null时,stdout仍会被写入stderr的先前输出(tty)。
将它们的位置互换一下,就可以解决问题。
echo 'foo' 2>/dev/null 1>&2