Podívejme se na další příklad. Jsou dány následující dva příkazy: první (ls
) je platný příkaz, zatímco druhý (ls -0
) je neplatný příkaz, protože obsahuje nepovolenou volbu -0
.
Tento příkaz je platný:
$ ls
Applications Documents Library Music Public$ echo $?
0
Nyní se podívejme na neplatný příkaz:
$ ls -0
ls: illegal option -- 0
usage: ls $ echo $?
1
Problémem druhého skriptu je, že zobrazuje případná chybová hlášení do STDERR
. Pro naše skripty však chceme chybová hlášení potlačit. Naštěstí existuje hack, který udělá přesně to, co chceme.
Zkusíme to znovu s příkazem > /dev/null 2>&1
:
$ ls -0 > /dev/null 2>&1
$ echo $?
1
Všimněte si, že tentokrát se nám žádné chybové zprávy nezobrazily. Abychom to rozebrali, potlačíme chybový výstup (stderr
) příkazu ls -0
, přesměrujeme ho na standardní výstup (stdout
), zapíšeme ho do /dev/null
, čímž ho okamžitě zahodíme. Symbol >&
je operátor, který zkopíruje výstup prvního deskriptoru souboru (2) a přesměruje na výstup druhého deskriptoru souboru (1).
Nyní se podíváme, co představují čísla v 2>&1
, když se podíváme na tuto tabulku deskriptorů souborů.
To si můžeme ověřit tak, že místo /dev/null
provedeme výstup do běžného souboru.
$ ls -0 > /tmp/devnull 2>&1
$ echo $?
1$ cat /tmp/devnull
ls: illegal option -- 0
usage: ls