Eu tenho um comando: mywritercmd -f /tmp/test 2>&1 > log.txt
eu executo em um terminal bash, o comando retornaerror: could not open output file "/tmp/test": Permission denied
No entanto, esta mensagem de erro não está escrita no arquivo log.txt , fica vazia...
Por quê?
Eu teria imaginado que esta mensagem deveria ir para stderr e depois no arquivo, mas de alguma forma não é.
A ordenação faz a diferença. A linha de comando é avaliada da esquerda para a direita. Quando atinge
2>&1
, a instrução é entregar stderr para onde quer que stdout vá. Neste momento, a> log.txt
peça ainda não foi avaliada. Como resultado, o stderr permanece no padrão, que é a saída para o terminal.mywritercmd -f /tmp/test > log.txt 2>&1
resultará no comportamento desejado e fará com que a mensagem de erro seja gravada no arquivo log.txt.