Por que “Permissão negada” não está no stderr?

Por que “Permissão negada” não está no stderr?

Eu tenho um comando: mywritercmd -f /tmp/test 2>&1 > log.txtexecuto 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.txtpeç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>&1resultará no comportamento desejado e fará com que a mensagem de erro seja gravada no arquivo log.txt.

informação relacionada