Os redirecionamentos são processados da esquerda para a direita. Se você fizer
2>&1 1> /dev/null
O primeiro redirecionamento stderraponta para o fluxo que stdoutaponta para o momento (que é o seu tty essencialmente). Não stderrcria um pseudônimo de stdout.
Em seguida, stdouté redirecionado para o bloco de bits. O stdoutredirecionamento não afeta o stderrredirecionamento anterior . stderrainda se refere ao seu tty.
Tão:
ls file_that_doesnt_exist 2>&1 1> /dev/null
imprimirá apenas a mensagem de erro no seu terminal.
A bashpágina de documentação de redirecionamento menciona isso explicitamente:
Observe que a ordem dos redirecionamentos é significativa. Por exemplo, o comando
ls > dirlist 2>&1
direciona a saída padrão e o erro padrão para a lista de diretórios do arquivo, enquanto o comando
ls 2>&1 > dirlist
direciona apenas a saída padrão para o arquivo dirlist, porque o erro padrão foi duplicado da saída padrão antes que a saída padrão fosse redirecionada para dirlist .