为什么 "ls 1>&2 2> /dev/null" 向我的控制台输出一些东西?

Why does "ls 1>&2 2> /dev/null" output something to my console?

我正在尝试了解管道,但对以下命令的结果感到困惑。

% ls 1>&2 2> /dev/null

Applications    Users       cores       home        sbin        var
Library     Volumes     dev     opt     tmp
System      bin     etc     private     usr

我觉得

因此,我想我应该看不到上面命令的输出,但该命令确实输出了一些结果。为什么?

因为 1>&2 将 stdout 重定向到 stderr 设置为 的地方,而此时你还没有重定向 stderr。然后,稍后,您将 stderr 重定向到 /dev/null。所以 stdout 输出到 stderr 的默认目的地。

颠倒顺序,将 stderr 重定向到 /dev/null,然后将 stdout 重定向到 stderr(现在)指向的位置:

ls 2>/dev/null 1>&2