Vejamos outro exemplo. Dado os dois comandos seguintes: o primeiro (ls) é um comando válido enquanto o segundo (ls -0) é um comando inválido porque contém uma opção ilegal -0.

Este é um comando válido:

$ ls
Applications Documents Library Music Public$ echo $?
0

Agora vamos olhar para o comando inválido:

$ ls -0
ls: illegal option -- 0
usage: ls $ echo $?
1

O problema com o segundo script é que ele exibe qualquer mensagem de erro em STDERR. Contudo, para os nossos scripts, queremos suprimir as mensagens de erro. Felizmente há um hack para fazer exatamente o que queremos.

Tentemos isso novamente com > /dev/null 2>&1:

$ ls -0 > /dev/null 2>&1
$ echo $?
1

Note desta vez, que não vimos nenhuma mensagem de erro. Para quebrar isso, estamos suprimindo a saída de erro (stderr) do comando ls -0, redirecionando-a para a saída padrão (stdout), escrevendo-a para /dev/null, descartando-a imediatamente. O símbolo >& é um operador que copia a saída do primeiro descritor de ficheiro (2) e redirecciona para a saída do segundo descritor de ficheiro (1).

Agora vamos ver o que os números em 2>&1 representam ao olhar para este gráfico de Descritores de Ficheiros.

Podemos verificar isso através da saída para um ficheiro normal em vez de /dev/null.

$ ls -0 > /tmp/devnull 2>&1
$ echo $?
1$ cat /tmp/devnull
ls: illegal option -- 0
usage: ls

Deixe uma resposta

O seu endereço de email não será publicado.