为什么
echo 'foo' 1>&2 2>/dev/null
给出输出?foo
被重定向到文件描述符2,文件描述符2被重定向到/dev/null
。应该没有输出?
这是关于重定向的顺序。当bash看到几个重定向时,它会从左到右处理它们。
stdout的第一个重定向重定向到stderr(tty)的当前值。当stderr更改为/dev/null时,stdout仍然写入stderrs的前一个输出(tty)。
改变他们的位置,就会奏效。
echo 'foo' 2>/dev/null 1>&2
有关更多详细信息,请参阅http://www.catonmat.net/blog/bash-one-liners-explained-part-three/