Como redirecionar a saída de erro (stderr) para stdout ou arquivo

De Wiki Hackstore

Situação normal no Linux é executar um comando direcionando sua saída para um arquivo (ou outro comando, como less) e ver que os erros não são direcionados corretamente, embora apareçam na tela. Por que isso acontece e como resolver?

Existem três streams de dados padrão em todo ambiente Linux:

stdin: Entrada padrão de dados para o programa

stdout: Saída padrão de dados do programa

stderr: Saída padrão de erro

Os programas recebem dados na stdin toda vez que você direciona algo para ele usando o pipe (comando | outro_comando) ou direciona o conteúdo de um arquivo (comando < arquivo.txt).

O resultado da execução de um programa em geral é jogado na saída padrão (stdout) e os erros na stderr. Embora apareça tudo na tela, na verdade saem por canais diferentes que desembocam no console.

Só que quando você usa direciona a saída usando um pipe ou “>” apenas a stdout é direcionada, a strerr continua indo para a tela. Para modificar esse fluxo, podem ser usados os artifícios abaixo:


Redirecionar saída (stdout) para arquivo:

comando > saida.txt

Redirecionar stderr para stdout:

comando 2>&1

Redirecionar stderr para stdout e então para arquivo:

comando 2>&1 > saida.txt

Redirecionar stderr e stdout direto para arquivo:

comando &> arquivo.txt

Esse tipo de redirecionamento pode ser particularmente útil em scripts que rodam no cron, em que a saída stdout é direcionada para /dev/null mas stdout continua indo para o e-mail do administrador.


fonte:

http://douglascunha.com/blog/2009/01/como-redirecionar-a-saida-de-erro-stderr-para-stdout-ou-arquivo/