technology

Silenciando o ruído: um guia para redirecionar a saída para /dev/null no Linux

.

Se a saída desnecessária do seu script o incomodar, despeje-o em /dev/null.

Ao desenvolver um script para automatizar uma tarefa, você pode descobrir que a saída é impressa mesmo que na verdade não exija nada e, por causa disso, seu terminal fica lotado de texto desnecessário.

A melhor maneira de resolver esse problema é redirecionar a saída do seu script para /dev/null, o que efetivamente descartará a saída e impedirá que ela obstrua seu terminal.

Então, vamos falar sobre como redirecionar a saída de um script para /dev/null e quais são as vantagens e desvantagens de redirecionar a saída para /dev/null.

O que é /dev/null/ no Linux e como ele coletará a saída do seu script?

A pergunta óbvia é: o que exatamente é /dev/null/ e por que o usamos? /dev/null é um arquivo especial que é basicamente usado em scripts de shell para despejar ou descartar saída (stdout), erros (stderr) ou ambos (stdout e stderr).

Muitas vezes é chamado de “buraco negro” porque os dados gravados nele nunca podem ser recuperados.

É importante observar que você não pode executar /dev/null em seu terminal e, por isso, não pode usar /dev/null na tubulação com outro comando.

Se você não acredita em mim, dê uma olhada na saída de stat /dev/null.

onde você pode ver que /dev/null é um dispositivo de caractere, que não ocupa nenhum espaço, portanto seu tamanho é 0 bytes e seu tipo é “caractere especial” sem permissão executável para executar.

stat do /dev/null

Então, a pergunta seguinte óbvia é: “Como exatamente posso usar /dev/null?” Você pode enviar a saída padrão ou o erro padrão de um comando para /dev/null com o operador de redirecionamento e o descritor de arquivo correto.

Presumo que você esteja familiarizado com o conceito de “redirecionamento”, que permite salvar os resultados ou falhas de um comando em um arquivo em vez de mostrá-los na tela. Vou tentar explicar alguns dos conceitos aqui para que você possa ter uma noção de como usá-los com /dev/null, mas se não tiver certeza, leia este artigo.

Redirecionando a saída (stdout) para /dev/null no Linux

Vamos começar com Stdout, que significa “saída padrão” e é o canal de saída padrão de um comando quando o comando é executado com sucesso e produz alguma saída.

Esta saída pode ser direcionada para qualquer arquivo ou até mesmo /dev/null se não precisarmos. Para explicar como redirecionar a saída para /dev/null, primeiro veja como funciona.

Começarei mostrando o que acontece se eu não usar /dev/null e então redirecionar a saída para /dev/null. Por exemplo, se eu quiser imprimir os arquivos que estão localizados no diretório /etc/ssh/, posso simplesmente usar:

$ ls -l /etc/ssh

E aqui está a saída do comando acima, que exibe o conteúdo do arquivo do diretório /etc/ssh:

saída do comando ls sem redirecionamento
saída do comando ls sem redirecionamento

Agora, usarei o operador de redirecionamento (>) com o descritor de arquivo “1” para ocultar a saída do último comando.

Para fazer isso, simplesmente digito o mesmo comando, mas adiciono “1>/dev/nulo” ou então use a sintaxe mais curta “> /dev/null” até o fim.

$ ls -l /etc/ssh 1> /dev/null
or
$ ls -l /etc/ssh > /dev/null

Excelente! Como você pode ver no resultado abaixo, consegui usar o operador de redirecionamento para ocultar a saída que foi impressa primeiro na tela.

Saída do comando ls com operador de redirecionamento para suprimir a saída
Saída do comando ls com operador de redirecionamento para suprimir a saída

Agora é sua vez de concluir esta tarefa e você deve usar a mesma sintaxe de comando que acabei de demonstrar.

Redirecionando a saída de erro (stderr) para /dev/null no Linux

Stderr, que é a abreviação de “erro padrão”, faz com que quaisquer avisos ou erros causados ​​por um comando sejam exibidos na tela, o que é muito útil para mostrar erros e avisos, mas muitas vezes pode desviar a atenção da saída que se está procurando para.

Usando o operador de redirecionamento, você pode redirecionar esses erros e avisos para um arquivo de texto ou até mesmo completamente usando /dev/null.

Por exemplo, se eu listar um diretório que não existe, é claro que uma mensagem de erro será impressa na tela como “ls: não é possível acessar ‘/etc/ssh/desconhecido’: arquivo ou diretório inexistente.”

Para suprimir esse erro, posso usar o operador de redirecionamento da seguinte maneira:

$ ls /etc/ssh/unknown 2> /dev/null 

A saída do comando acima é mostrada abaixo:

supressão de saída de erro de comando ls
saída de erro do comando ls suprimir

Isso não é difícil de entender, é?

Redirecionando saída e erros (stdout & stderr) para /dev/null no Linux

Dependendo de suas necessidades, você pode suprimir o erro ou enviar a mensagem usando o método acima, mas se não quiser que nenhum seja exibido na tela, envie a saída padrão e os erros para /dev/null, você precisa seguir o abaixo degraus.

Para isso, você precisa combinar a saída padrão (1) e os erros padrão (2) usando o operador “>” e redirecioná-los para /dev/null, assim: command > /dev/null 2>&1

Vamos dar um exemplo. Se você não deseja imprimir a mensagem de erro ou sucesso do comando, pode usar o seguinte comando para suprimir ambas as mensagens:

$ ls /etc/sshs/ > /dev/null 2>&1

Confuso com o comando acima? O comando dado acima pode ser difícil de entender, mas não é muito difícil de descobrir.

De acordo com a disponibilidade do arquivo ou diretório “ls”, o comando lançará um erro ou saída, mas não o exibirá aqui porque será sugado por /dev/null.

E então, 2>&1 estará sugando a saída de /dev/null porque este “/dev/null” está disponível em seu sistema de arquivos, o que pode interferir, então 2>&1 irá certificar-se de não imprimir nada.

Ao invés de usar o comando acima, você pode usar o abaixo, que é mais simples e fácil de usar:

$ ls /etc/sshs/ &> /dev/null 

Veja os resultados por si mesmo, com a saída de ambos os comandos mostrados abaixo.

Redirecionando saída e erro para dev null
Redirecionando saída e erro para /dev/null

E com isso, termino.

Referência rápida para redirecionar a saída para /dev/null

  • Use o seguinte comando para direcionar mensagens de saída padrão (stdout) para /dev/null:
  • Use o seguinte comando para enviar mensagens de erro padrão (stderr) para /dev/null:
  • Use o seguinte comando para enviar a saída padrão e o erro padrão para /dev/null:

Embrulhar

Essa pode ser uma ótima maneira de garantir que seus scripts sejam executados sem problemas e com eficiência, pois a saída não sobrecarregará seu terminal

Com isso em mente, é importante lembrar que redirecionar a saída para /dev/null tem sua utilidade, mas se você não tomar cuidado, pode causar problemas porque joga fora toda a saída e dificulta a depuração.

De qualquer forma, se houver algo que eu precise considerar, use o espaço abaixo para fornecer qualquer informação adicional ou feedback.

Até lá, coloque os pés para cima e relaxe. Como sempre, o próximo artigo será publicado em breve.

.

Mostrar mais

Artigos relacionados

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Botão Voltar ao topo