O atalho de redirecionamento de E / S não funciona quando no final de uma linha de comando

2

Estou me sentindo confortável com o redirecionamento de E / S. Tomei conhecimento do atalho &> para 2>&1 . Eu acredito que também funciona como >& . Pode haver uma nuance para a qual eu não estou ciente.

Ao usar isso, ele deve estar no meio de uma linha de comando:

ls test.txt missing &> output.txt

No entanto, ao usar o formato longo, ele precisa estar no final da linha de comando:

ls test.txt missing > output.txt 2>&1

Ao tentar colocar o atalho no final, isso resulta em um erro:

ls test.txt missing > output.txt &>
-bash: syntax error near unexpected token 'newline'

Por que isso? O que torna o atalho diferente, de modo que ele deve ser usado inline, e não no final da linha, da mesma forma que o método de formato longo faz?

    
por theillien 19.07.2015 / 10:49

1 resposta

5

&>word is :

semantically equivalent to

>word 2>&1

Não é igual a 2>&1 sozinho. Assim como para redirecionar a saída , a parte word (destination) é necessária . O 2>&1 está realmente usando um operador diferente e requer a destino word também (é " 1 " aqui).

Os redirecionamentos são aplicados em ordem e é permitido redirecionar mais de uma vez. Você pode mudar seu comando para:

ls test.txt missing > output.txt &>tmp.txt

e forneça um destino para &> para ver o efeito. É o que acha que você está tentando escrever, e o erro diz que espera ver o segundo nome de arquivo e não o encontrou.

    
por 19.07.2015 / 11:05