Os redirecionamentos são processados da esquerda para a direita. Se você fizer
2>&1 1> /dev/null
O primeiro redirecionamento faz com que stderr
aponte para o fluxo que stdout
aponta para esse momento (que é seu tty essencialmente). Isso não torna stderr
um alias de stdout
.
Em seguida, stdout
é redirecionado para o depósito de bits. O redirecionamento stdout
não afeta o redirecionamento stderr
anterior. stderr
ainda se refere ao seu tty.
Então:
ls file_that_doesnt_exist 2>&1 1> /dev/null
imprimirá apenas a mensagem de erro no seu terminal.
A página de documentação de redirecionamento bash
menciona isso explicitamente:
Note that the order of redirections is significant. For example, the command
ls > dirlist 2>&1
directs both standard output and standard error to the file dirlist, while the command
ls 2>&1 > dirlist
directs only the standard output to file dirlist, because the standard error was duplicated from the standard output before the standard output was redirected to dirlist.