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