Eu tenho um comando: mywritercmd -f /tmp/test 2>&1 > log.txt
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 nolog.txtarquivo, ele permanece vazio...
Por que?
Eu teria imaginado que esta mensagem deveria ir para stderr e depois para o arquivo, mas de alguma forma não é.
Responder1
A encomenda faz a diferença. A linha de comando é avaliada da esquerda para a direita. Quando atingir 2>&1
, a instrução é entregar o stderr para onde quer que o 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.