Интересно, почему стандартные погрешности всегда производятся сначала несмотря на порядок перенаправления в моих командах:
"сначала >
затем 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
Какова подробная процедура перенаправления для каждого?
Поскольку 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