Порядок выполнения перенаправления?
Интересно, почему стандартные ошибки всегда выводятся первыми, несмотря на порядок перенаправления в моих командах:
"первый > затем 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 Сначала регистрирует все файлы, выводит сообщения об ошибках для отсутствующих файлов, затем сортирует существующие имена файлов и выводит их.
Таким образом, перенаправления не влияют на порядок вывода. Вы можете проверить это, написав простую команду, которая выводит что-то для обоих fds, и их порядок будет одинаковым
$ 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