Laten we eens kijken naar een ander voorbeeld. Gegeven de volgende twee commando’s: het eerste (ls
) is een geldig commando terwijl het tweede (ls -0
) een ongeldig commando is omdat het een illegale optie -0
bevat.
Dit is een geldig commando:
$ ls
Applications Documents Library Music Public$ echo $?
0
Laten we nu eens kijken naar het ongeldige commando:
$ ls -0
ls: illegal option -- 0
usage: ls $ echo $?
1
Het probleem met het tweede script is dat het foutmeldingen weergeeft in STDERR
. Maar voor onze scripts willen we foutmeldingen onderdrukken. Gelukkig is er een hack om precies te doen wat we willen.
Laten we dat nog eens proberen met > /dev/null 2>&1
:
$ ls -0 > /dev/null 2>&1
$ echo $?
1
Merk deze keer op, dat we geen foutmeldingen te zien kregen. Om dit op te splitsen, onderdrukken we de foutuitvoer (stderr
) van het ls -0
commando, sturen het door naar de standaarduitvoer (stdout
), schrijven het naar /dev/null
en gooien het meteen weg. Het symbool >&
is een operator die de uitvoer van de eerste bestandsdescriptor (2) kopieert en omleidt naar de uitvoer van de tweede bestandsdescriptor (1).
Nu zullen we eens zien wat de getallen in 2>&1
voorstellen door te kijken naar deze grafiek van bestandsdescriptors.
We kunnen dit verifiëren door uitvoer naar een gewoon bestand in plaats van /dev/null
.
$ ls -0 > /tmp/devnull 2>&1
$ echo $?
1$ cat /tmp/devnull
ls: illegal option -- 0
usage: ls