Vi tittar på ett annat exempel. Givet följande två kommandon: Det första (ls
) är ett giltigt kommando medan det andra (ls -0
) är ett ogiltigt kommando eftersom det innehåller ett olagligt alternativ -0
.
Detta är ett giltigt kommando:
$ ls
Applications Documents Library Music Public$ echo $?
0
Nu ska vi titta på det ogiltiga kommandot:
$ ls -0
ls: illegal option -- 0
usage: ls $ echo $?
1
Problemet med det andra skriptet är att det visar eventuella felmeddelanden i STDERR
. För våra skript vill vi dock undertrycka felmeddelanden. Som tur är finns det ett hack för att göra exakt vad vi vill.
Låt oss prova det igen med > /dev/null 2>&1
:
$ ls -0 > /dev/null 2>&1
$ echo $?
1
Märk den här gången att vi inte ser några felmeddelanden. För att bryta ner det här, så undertrycker vi felutmatningen (stderr
) av kommandot ls -0
, omdirigerar den till standardutmatningen (stdout
), skriver den till /dev/null
och kastar den därmed omedelbart. Symbolen >&
är en operatör som kopierar utdata från den första filbeskrivaren (2) och omdirigerar till utdata från den andra filbeskrivaren (1).
Nu ska vi se vad siffrorna i 2>&1
representerar genom att titta på det här diagrammet över filbeskrivare.
Vi kan verifiera detta genom att skriva ut till en vanlig fil i stället för till /dev/null
.
$ ls -0 > /tmp/devnull 2>&1
$ echo $?
1$ cat /tmp/devnull
ls: illegal option -- 0
usage: ls