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

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.