O Que É stderr? O Fluxo de Erro Padrão
stderr (erro padrão) é o fluxo padrão no qual um programa escreve suas mensagens de erro e diagnósticos, mantido separado da saída normal em stdout.
Programas escrevem seus resultados em stdout e seus avisos e erros em stderr. Dividir os dois significa que você pode capturar dados limpos enquanto ainda vê os problemas, e explica por que algumas mensagens de erro ainda aparecem mesmo quando você redireciona a saída normal para um arquivo.
O que é stderr
stderr é o file descriptor 2, o canal para diagnósticos. Mensagens de erro, avisos e notas de progresso tipicamente vão para cá, para não poluir a saída real do programa.
Por que é separado
Como stderr é um fluxo diferente de stdout, você pode enviar os dados de um programa adiante por pipe enquanto seus erros ainda são impressos no terminal. Redirecionar com > captura apenas stdout, deixando stderr visível.
Redirecionando stderr
cmd 2> errors.logenvia stderr para um arquivo.cmd 2>&1funde stderr em stdout.cmd > out.log 2>&1captura ambos os fluxos em um arquivo.
Uma pegadinha comum
A ordem importa: cmd > out.log 2>&1 funciona, mas cmd 2>&1 > out.log não redireciona stderr para o arquivo, porque os fluxos são conectados da esquerda para a direita. Isso engana muitos scripts de captura de log de CI.
stderr em CI
CI funde stdout e stderr no log do job, frequentemente intercalados. Quando você analisa a saída de uma ferramenta, lembre-se de que avisos em stderr podem estar misturados, então resultados legíveis por máquina pertencem a stdout para mantê-los limpos.
Lendo falhas em runners gerenciados
A Latchkey captura ambos os fluxos no log do job, então mensagens de erro em stderr estão ali mesmo quando um step falha. Enviar diagnósticos para stderr mantém seu stdout limpo para qualquer análise posterior.
Principais conclusões
- stderr é o fluxo de erro e diagnósticos, file descriptor 2.
- É separado de stdout para que dados e erros possam ser tratados independentemente.
- A ordem do redirecionamento importa: use
> out 2>&1para capturar ambos os fluxos.