entender uma sequência de redirecionamentos

8

Se vários redirecionamentos forem usados ​​juntos, a mudança de ordem faz diferença?

Como alguém deve entender o significado de sua ordem? O canal encadeado de redirecionamentos é criado como a leitura dos redirecionamentos da esquerda para a direita ou da direita para a esquerda?

Por exemplo

command 2>&1 > somefile

command > somefile 2>&1

Obrigado e cumprimentos!

Tim
fonte

Respostas:

7

Sim, o pedido faz a diferença e deve ser lido da esquerda para a direita.

command 2>&1 >somefilesignifica redirecionar o stderr (2) para o destino atual do stdout (o terminal). Então mude stdout para ir para somefile. Então stderr vai para o terminal e stdout vai para um arquivo.

command >somefile 2>&1significa redirecionar stdout para somefilee, em seguida, redirecionar stderr para o mesmo destino que stdout (o arquivo). Então stderr e stdout vão para somefile.

Isso é explicado na seção 3.6 do manual do Bash: Redirecionamentos .

cjm
fonte
1
man bash 

diz:

REDIRECÇÃO Antes de um comando ser executado, sua entrada e saída podem ser redirecionadas usando uma notação especial interpretada pelo shell. A correção também pode ser usada para abrir e fechar arquivos para o atual ambiente de execução de shell. Os seguintes operadores de redirecionamento podem preceder ou aparecer em qualquer lugar dentro de um comando simples ou podem seguir um comando. Os redirecionamentos são processados ​​na ordem em que aparecem, da esquerda para a direita.

e

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.

Usuário desconhecido
fonte