|
Se já temos algumas noções da árvore de diretórios GNU / Linux, devemos pelo menos estar familiarizados com a referência / dev /, que é efetivamente onde todos os arquivos relacionados dispositivos de hardware.
Se olharmos no diretório / Dev / veremos um "arquivo" chamado nulo, mas se quisermos abri-lo para ver seu conteúdo, o sistema nos dirá que não é possível, pois não é um conteúdo comum. Anexei a palavra arquivo porque, como todos sabem no Linux, tudo (hardware e software) é representado como um arquivo. |
A qual dispositivo / dev / null corresponde?
Para fins práticos, imagine uma lata de lixo, um poço sem fundo ou espaço sideral onde jogar qualquer coisa sem a possibilidade de recuperá-la (não importa o quanto os caras da NASA tentem).
Mas se eu já tenho comandos como rm, por que quero algo novo para excluir?
Porque a maneira como os dois “buracos negros” funcionam é completamente diferente: como você faria para substituir a saída padrão de um erro em um comando dentro de um script de shell em tempo de execução? É aqui que entra / dev / null.
Vamos ver com um exemplo.
Criamos um arquivo chamado tests contendo a string "Hello World". Se quisermos representar o conteúdo desse arquivo na linha de comando, podemos fazer isso da seguinte maneira:
usuário @ laptop: ~ $ cat teste
Olá mundo
Se o arquivo não existisse ou fosse nomeado como testes (com um 's' no final), obteríamos o seguinte erro no console:
usuário @ laptop: ~ $ cat testes
cat: tests: O arquivo ou diretório não existe
O que podemos fazer para evitar a mensagem de erro? Bem, basta redirecionar a saída do comando, em caso de erro, para uma "lata de lixo", ou seja, para / dev / null
Como especificamos isso em caso de erro? Aqui você insere os valores padrão de entrada, saída e erro para um programa: STDIN, STDOUT e STDERR (que podem ser substituídos por 0, 1 e 2, respectivamente). Desta forma, se colocarmos ...
usuário @ laptop: ~ $ cat tests 2> / dev / null
usuário @ laptop: ~ $
… Veremos que a mensagem de erro não será produzida no console.
Você deve ter cuidado porque a sintaxe é essencial: entre os caracteres 2 e> não deve haver espaço. Caso contrário, daria o seguinte:
usuário @ laptop: ~ $ cat tests 2> / dev / null
cat: tests: O arquivo ou diretório não existe
cat: 2: O arquivo ou diretório não existe
Em contraste, um espaço entre> e / dev / null não afetará negativamente o resultado.
Também podemos usar o redirecionamento de erro, por exemplo, para capturar erros em um arquivo de log da seguinte maneira:
usuário @ laptop: ~ $ cat tests 2> err.log
Outro caso interessante seria a coleta de resultados em outro arquivo desde que não ocorra erro, para o qual colocaríamos:
usuário @ laptop: ~ $ cat test 1> output_result 2> err.log
Por fim, vale a pena colocar a expressão «> / dev / null 2> & 1» em que se combinam a saída padrão e a saída de erro, redirecionando-as para que em nenhum caso a informação de saída seja obtida.