Por que `2>&1` não funciona neste pipeline?

Por que `2>&1` não funciona neste pipeline?

Não consigo encontrar uma maneira de redirecionar o erro no meu NAS.

O shell está /bin/she quando uso > mylogfile.log 2>&1ainda vejo o erro imprimindo no terminal. O comando específico é

find /volume1/ | grep "totoro" > ~/totoro.log 2>&1

e vejo erro de find. Alguma maneira de fazer o redirecionamento funcionar? Como escrever finderros no arquivo de log?

Responder1

find /volume1/ | grep "totoro" > ~/totoro.log 2>&1

Seus 2>&1efeitos grepapenas, não find. No comando abaixo, o primeiro 2>&1afeta find:

find /volume1/ 2>&1 | grep "totoro" > ~/totoro.log 2>&1   # probably wrong

Mas isso enviará stderr junto com stdout de findpara grep. Você provavelmente não deseja grepfiltrar stderr de find. Acho que você deseja capturar stdout e stderr de todo o comando composto. Nesse caso, execute o comando em um subshell explícito e redirecione seus fluxos de saída e de erro:

(find /volume1/ 2>&1 | grep "totoro") > ~/totoro.log 2>&1

Responder2

Por favor, veja o comando "tee". Ele lê a entrada padrão e grava na saída e nos arquivos padrão. Isso pode ser útil aqui.

informação relacionada