Os programas normalmente gravam resultados comuns na saída padrão e diagnósticos em um fluxo separado chamado erro padrão, ou stderr. Manter os fluxos separados permite salvar dados úteis sem misturar mensagens de erro.
Text-Fu · Lição 3
stderr (Erro Padrão)
Aprenda a redirecionar o erro padrão separadamente ou combiná-lo com a saída padrão no Bash.
Separação dos Resultados Comuns e dos Erros
Considere um comando cujo caminho não existe:
$ ls /fake/directory > peanuts.txt
ls: cannot access '/fake/directory': No such file or directory
O operador > redireciona apenas stdout. O diagnóstico é gravado em stderr, que continua conectada ao terminal. Enquanto isso, o shell cria ou trunca peanuts.txt para stdout, mesmo que ls não produza um resultado comum.
Os fluxos padrão usam convencionalmente estes descritores de arquivo:
0: stdin (entrada padrão)1: stdout (saída padrão)2: stderr (erro padrão)
Por que o erro de ls /missing > results.txt normalmente permanece no terminal?
Redirecionamento de stderr com 2>
Coloque o descritor de arquivo 2 antes de > para redirecionar stderr:
$ ls /fake/directory 2> errors.txt
O shell cria ou trunca errors.txt e o conecta ao descritor 2. Stdout mantém seu destino anterior. Use 2>> errors.txt quando a saída de erro deva ser acrescentada.
Qual comando substitui errors.log pelos diagnósticos de find /restricted, mantendo stdout em seu destino atual?
Combinação de stdout e stderr
Para colocar os dois fluxos de saída em um arquivo, primeiro redirecione stdout e depois duplique stderr para o destino atual de stdout:
$ ls /fake/directory /etc/passwd > combined.txt 2>&1
Os redirecionamentos são processados da esquerda para a direita:
> combined.txtconecta stdout ao arquivo.2>&1conecta stderr ao destino para o qual stdout aponta naquele momento.
Inverter a ordem muda o resultado:
$ ls /fake/directory /etc/passwd 2>&1 > regular.txt
Aqui, stderr primeiro duplica o destino original de stdout no terminal. Depois, stdout muda para regular.txt; assim, os dois fluxos terminam em lugares diferentes.
Qual redirecionamento do Bash envia stdout e stderr de command para all.log?
O Bash também oferece &> como uma sintaxe mais curta para substituir um arquivo com os dois fluxos:
$ ls /fake/directory /etc/passwd &> combined.txt
Use &>> para acrescentar os dois fluxos no Bash. É útil reconhecer a forma explícita > file 2>&1, pois ela também aparece em scripts e documentações do shell.
Qual comando do Bash acrescenta stdout e stderr de build a build.log?
Descarte Consciente de um Fluxo
/dev/null é um dispositivo especial que descarta os dados gravados nele. Redirecione stderr para ele apenas quando tiver determinado que os diagnósticos são esperados e desnecessários:
$ ls /fake/directory 2> /dev/null
Isso não faz o comando ter sucesso nem altera seu status de saída; apenas oculta o fluxo de diagnóstico. Durante uma investigação, preserve ou exiba stderr em vez de descartar as informações necessárias.
O que check-data 2> /dev/null altera?
Para praticar o gerenciamento dos três fluxos padrão, experimente este laboratório:
- Redirecionamento de Entrada e Saída no Linux — Neste laboratório, você aprenderá a redirecionar entrada e saída no shell do Linux. Você praticará o controle do fluxo de dados dos comandos manipulando a saída padrão (stdout), o erro padrão (stderr) e a entrada padrão (stdin) com operadores como
>,>>,2>e o comandotee.
Lição concluída
Você concluiu stderr (Erro Padrão)
Agora você sabe manter os diagnósticos separados ou combiná-los com a saída comum dos comandos.
Reconheça stderr como o descritor de arquivo 2.
Substitua ou acrescente a um log de erros com
2>ou2>>.Aplique vários redirecionamentos da esquerda para a direita.
Combine os dois fluxos de saída com uma sintaxe consciente.
Descarte diagnósticos somente quando sua perda for aceitável.
Salve seu progresso
Crie uma conta gratuita para salvar esta lição e continuar em qualquer dispositivo.
Criar uma conta gratuita