La crontab pour les nuls

Petit détail : les chemins > /dev/null et > /dev/null 2>&1

Les chemins > /dev/null ainsi que > /dev/null 2>&1 sont bien connus des créateurs de scripts bash. Il faut savoir qu’un programme sous Linux possède 3 sources d’entrée/sortie :

  • Un input, nommé STDIN et associée à la valeur 0. C’est de là que les programmes reçoivent des données (saisies au clavier par exemple).
  • Deux outputs :
    • L’une nommée STDOUT et associée à la valeur 1 qui est la sortie standard du programme. On y trouve généralement le résultat des opérations.
    • L’autre nommée STDERR et associée à la valeur 2 qui est la sortie où vont toutes les erreurs du programme.

Lorsque quelqu’un qui crée un script shell veut que ce qui sort d’une commande n’aille nulle part, il écrit > /dev/null à la fin de sa commande. Cela aura pour effet d’envoyer dans le néant tout ce qui sort de STDOUT. Mais en cas d’erreur, il y aura quelque chose qui s’affichera !

Si l’on souhaite également envoyer les erreurs dans le néant, il faudra alors écrire > /dev/null 2>&1 à la fin de sa commande. Cela aura donc pour effet d’envoyer dans le néant tout ce qui sort de STDOUT mais aussi de STDERR. Vous ne reconnaissez rien dans 2>&1 ? Mais oui, les valeurs de STDERR et STDOUT !

Au final, > /dev/null 2>&1 peut être décomposé ainsi :

  • Le signe > indique où doit aller la sortie de ce qui se trouve à gauche de ce signe. Le > utilisé seul est un raccourci pour 1>, qui conduit donc tout ce qui sort de STDOUT vers l’endroit précisé à droite du signe >.
  • Le chemin /dev/null est l’équivalent du vide, du néant absolu. On y envoie tout ce qu’on ne veut pas garder.
  • Si vous avez compris la première ligne d’explication, vous avez deviné ce que veut dire 2>. 2> conduit tout ce qui sort de STDERR vers l’endroit précisé à droite du signe >.
  • L’esperluette suivi du chiffre 1 (&1) indiquent que ce qui sort de STDOUT doit suivre le même chemin que l’instruction de sortie précédemment écrite, à savoir 2>. C’est donc l’équivalent de 1>.
    • Si vous avez bien compris, 2>&1 est la version simplifiée de 1> /dev/null 2> /dev/null.

Cryonid

Freedom and privacy is what I'm fighting for.

1 réponse

  1. Benoît dit :

    Bonsoir,
    Merci pour cet article très intéressant et complet.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.