Regardons un autre exemple. Étant donné les deux commandes suivantes : la première (ls
) est une commande valide tandis que la seconde (ls -0
) est une commande invalide car elle contient une option illégale -0
.
C’est une commande valide :
$ ls
Applications Documents Library Music Public$ echo $?
0
Regardons maintenant la commande invalide :
$ ls -0
ls: illegal option -- 0
usage: ls $ echo $?
1
Le problème avec le second script est qu’il affiche tout message d’erreur dans STDERR
. Or pour nos scripts, nous voulons supprimer les messages d’erreur. Heureusement, il y a un hack pour faire exactement ce que nous voulons.
Essayons à nouveau avec > /dev/null 2>&1
:
$ ls -0 > /dev/null 2>&1
$ echo $?
1
Notez cette fois, que nous n’avons pas vu de messages d’erreur. Pour décomposer cela, nous supprimons la sortie d’erreur (stderr
) de la commande ls -0
, nous la redirigeons vers la sortie standard (stdout
), nous l’écrivons dans /dev/null
et nous la rejetons immédiatement. Le symbole >&
est un opérateur qui copie la sortie du premier descripteur de fichier (2) et la redirige vers la sortie du deuxième descripteur de fichier (1).
Voyons maintenant ce que représentent les chiffres de 2>&1
en regardant ce tableau des descripteurs de fichiers.
Nous pouvons vérifier ceci en sortant vers un fichier régulier au lieu de /dev/null
.
$ ls -0 > /tmp/devnull 2>&1
$ echo $?
1$ cat /tmp/devnull
ls: illegal option -- 0
usage: ls