Voltar ao Diminua Blog

Artigo

Entendendo os Símbolos de Redirecionamento no Shell Linux: De `>` a `2>&1`

Domine a arte de manipular a entrada e saída de comandos para otimizar seus scripts e diagnósticos.

Entendendo os Símbolos de Redirecionamento no Shell Linux: De `>` a `2>&1`

O Que São Símbolos de Redirecionamento?

No universo do Linux e outros sistemas baseados em Unix, a linha de comando é uma ferramenta poderosa. Para maximizar sua eficiência, é crucial entender como os comandos interagem entre si e como podemos controlar o fluxo de dados. Os símbolos de redirecionamento são operadores especiais que alteram o destino da saída padrão (stdout) de um comando ou a origem de sua entrada padrão (stdin). Eles permitem que você capture informações, alimente comandos com dados específicos e gerencie erros de maneira eficaz.

Por padrão, a maioria dos comandos no shell exibe sua saída na tela (terminal) e espera receber sua entrada do teclado. O redirecionamento nos permite mudar esse comportamento, tornando nossos fluxos de trabalho mais dinâmicos e automatizados.

Redirecionando a Saída Padrão (`>`)

O símbolo mais comum é o >. Ele redireciona a saída padrão de um comando para um arquivo. Se o arquivo não existir, ele será criado. Se existir, seu conteúdo será sobrescrito.

Exemplo:

ls -l > lista_arquivos.txt

Este comando listará o conteúdo do diretório atual em formato longo e salvará o resultado no arquivo lista_arquivos.txt, em vez de exibi-lo na tela.

Anexando a Saída Padrão (`>>`)

Para evitar a sobrescrita do conteúdo de um arquivo, utilizamos o operador de anexação >>. Ele adiciona a saída de um comando ao final de um arquivo existente ou cria o arquivo se ele não existir.

Exemplo:

echo "Log de eventos" >> log_geral.txt

Este comando adicionará a string "Log de eventos" ao final do arquivo log_geral.txt.

Redirecionando a Saída de Erro Padrão (`2>`)

Nem toda saída de um comando é sucesso. Comandos que falham ou encontram problemas geralmente reportam erros na saída de erro padrão (stderr), que, assim como a saída padrão, é exibida no terminal por padrão. Para capturar esses erros em um arquivo, usamos o descritor de arquivo 2 seguido pelo operador de redirecionamento >.

Exemplo:

find / -name "arquivo_inexistente.txt" 2> erros_busca.txt

Este comando tentará encontrar um arquivo em todo o sistema. Qualquer mensagem de erro (como permissão negada) será salva em erros_busca.txt, enquanto a saída normal (se houver) ainda apareceria no terminal.

Combinando Saída Padrão e Saída de Erro Padrão (`>&1` e `2>&1`)

É muito comum querermos capturar tanto a saída normal quanto os erros em um único local. Para isso, usamos um truque combinando os redirecionamentos. O descritor 1 representa a saída padrão (stdout), e o descritor 2 representa a saída de erro padrão (stderr).

Para direcionar a saída de erro (2) para o mesmo destino da saída padrão (1), usamos 2>&1. O & indica que estamos redirecionando um descritor de arquivo para outro descritor de arquivo, e não para um arquivo literal.

Exemplo:

ls -l /diretorio_inexistente > saida_completa.log 2>&1

Neste caso, o comando ls -l tentará listar um diretório que não existe. A mensagem de erro será direcionada para saida_completa.log. Se o diretório existisse e houvesse saída normal, ela também iria para o mesmo arquivo.

Alternativamente, podemos querer enviar a saída padrão para um arquivo e a saída de erro para outro:

comando_qualquer > saida_normal.txt 2> saida_erro.txt

Redirecionando a Entrada Padrão (`

Foto de Rafael Minguet Delgado no Pexels.