La Lanterne Rouge

Warning: Geek Inside

Que signifie "> /dev/null 2>&1" ?

- Posted in Sans catégorie by

Si comme moi vous êtes un gros flemmard qui n'est pas curieux au point de se demander pourquoi il croise régulièrement cette redirection

$ macommande > /dev/null 2>&1

dans les scripts shells qu'il édite et réutilise, alors je vous conseille de lire cet article qui va vous l'expliquer en quelques lignes. C'est peut être tout con, mais c'est encore plus con de pas savoir l'expliquer.

Je résume et traduit grossièrement :

il faut se rappeler que tout processus possède 3 flux standards :

  • un d'entrée (typiquement le clavier)
  • et deux de sortie (la sortie standard et l'erreur étant généralement l'affichage).

Ces trois flux sont représentés par des constantes STDIN, STDOUT et STDERR dont les valeurs sont respectivement 0, 1 et 2.

La redirection du flux de sortie vers /dev/null avec ">" ne va concerner que STDOUT, mais pas STDERR. Les messages envoyés sur cette sortie vont donc se retrouver à l'écran (en tout cas sur la sortie courante, cela peut aussi être un fichier de log).

En précisant "2>/dev/null" on redirige uniquement STDERR.

En utilisant "2>&1" on précise "rediriger STDERR là où est redirigé STDOUT" (le "1"). Si STDOUT est précédemment redirigé vers /dev/null, alors STDERR suivra. C'est aussi simple que ça.

Vous dormirez ensuite moins bête ce soir, enfin j'espère pour moi en tout cas.