Порядок выполнения перенаправления?

Интересно, почему стандартные погрешности всегда производятся сначала несмотря на порядок перенаправления в моих командах:

"сначала > затем 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
задан 7 August 2012 в 19:29

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
0
ответ дан 7 August 2012 в 19:29

Другие вопросы по тегам:

Похожие вопросы: