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

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.