Ordem de execução do redirecionamento?

1

Eu me pergunto por que os erros padrão são sempre produzidos primeiro, apesar da ordem de redirecionamento nos meus comandos:

"primeiro > then 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

"primeiro 2> then 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

Qual é o procedimento detalhado de redirecionamento para cada um?

    
por LYg 07.08.2012 / 17:23

1 resposta

3

Porque ls indica todos os arquivos primeiro, gera mensagens de erro para os arquivos ausentes, então ordena os nomes de arquivos existentes e os envia.

Assim, os redirecionamentos não afetam a ordem da saída. Você pode testar isso escrevendo um comando simples que produza algo para ambos os fds, e a ordem deles será a mesma

$ 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
    
por geirha 07.08.2012 / 18:29