为什么 "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 将标准输入重定向到标准错误流
- 2 > /dev/null 将 stderr 重定向到一个垃圾地方
因此,我想我应该看不到上面命令的输出,但该命令确实输出了一些结果。为什么?
因为 1>&2
将 stdout 重定向到 stderr 设置为 的地方,而此时你还没有重定向 stderr。然后,稍后,您将 stderr 重定向到 /dev/null
。所以 stdout 输出到 stderr 的默认目的地。
颠倒顺序,将 stderr 重定向到 /dev/null
,然后将 stdout 重定向到 stderr(现在)指向的位置:
ls 2>/dev/null 1>&2
我正在尝试了解管道,但对以下命令的结果感到困惑。
% ls 1>&2 2> /dev/null
Applications Users cores home sbin var
Library Volumes dev opt tmp
System bin etc private usr
我觉得
- 1> &2 将标准输入重定向到标准错误流
- 2 > /dev/null 将 stderr 重定向到一个垃圾地方
因此,我想我应该看不到上面命令的输出,但该命令确实输出了一些结果。为什么?
因为 1>&2
将 stdout 重定向到 stderr 设置为 的地方,而此时你还没有重定向 stderr。然后,稍后,您将 stderr 重定向到 /dev/null
。所以 stdout 输出到 stderr 的默认目的地。
颠倒顺序,将 stderr 重定向到 /dev/null
,然后将 stdout 重定向到 stderr(现在)指向的位置:
ls 2>/dev/null 1>&2