$ foobar
sh: foobar: not found
$ foobar 2>/dev/null
$
我正在尝试仅重定向 foobar 的 stderr(如果 foobar 存在并且可以运行),但 shell 的错误消息也被重定向。这发生在 bash、ksh 和 sh 中,但不在 csh 中。我不熟悉 bourne shell 源代码,但我猜这是因为 shell 首先分叉,然后重定向,然后尝试 exec(),当 exec() 失败时,它会向已经重定向的 stderr 发送错误消息。