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.
Bonsoir,
Merci pour cet article très intéressant et complet.