重定向执行顺序?

重定向执行顺序?

我想知道为什么尽管我的命令中有重定向顺序,但标准错误总是首先输出:

“首先>然后2>&1

lyg@lyg-VirtualBox:~$ > txt
lyg@lyg-VirtualBox:~$ ls txt  tt ttt > txt  2>&1
lyg@lyg-VirtualBox:~$ cat txt
ls: cannot access tt: No such file or directory
ls: cannot access ttt: No such file or directory
txt

“首先2>然后1>&2

lyg@lyg-VirtualBox:~$ ls txt  tt ttt 2> txt  1>&2
lyg@lyg-VirtualBox:~$ cat txt
ls: cannot access tt: No such file or directory
ls: cannot access ttt: No such file or directory
txt

每个重定向的详细过程是什么?

答案1

因为ls首先统计所有文件,输出缺失文件的错误消息,然后对现有文件名进行排序并输出它们。

因此重定向对输出顺序没有影响。你可以编写一个简单的命令来测试这一点,该命令向两个 fd 输出一些内容,它们的顺序将相同

$ f() { echo stdout; echo stderr >&2; }
$ f > /tmp/output 2>&1
$ cat /tmp/output
stdout
stderr
$ f 2> /tmp/output >&2
$ cat /tmp/output
stdout
stderr

相关内容