Pourquoi les commandes Linux ne disent-elles rien lorsqu’elles s’exécutent ?
Sommaire
Points clés à retenir
- L'absence de sortie de terminal pour certaines commandes Linux réussies provient d'un choix de conception historique.
- Les programmes silencieux permettent de créer facilement des pipelines au niveau du shell et continuent d'influencer le développement de Linux, remontant à la philosophie Unix.
- Vérifiez le succès de la commande en examinant l'état de sortie, où 0 signifie le succès et d'autres chiffres indiquent des erreurs.
Lorsque vous commencez à utiliser Linux pour la première fois, vous vous retrouverez souvent à utiliser la ligne de commande. Vous tapez une commande, attendez la sortie, puis plus rien. Juste un curseur clignotant, attendant votre contribution. Que se passe-t-il? Voici pourquoi de nombreuses commandes Linux ne disent rien lorsqu'elles s'exécutent avec succès.
Pourquoi pas de sortie terminale ?
Par exemple, vous pouvez exécuter la commande ls dans un répertoire sans aucun fichier. Vous recevrez simplement votre invite sans que rien ne soit imprimé sur le terminal.
La principale raison pour laquelle de nombreuses commandes de terminal n'impriment rien lorsqu'elles réussissent est qu'il s'agit d'un vestige historique de l'époque Unix.
De nombreux systèmes Unix fonctionnaient sur des télétypes, qui fonctionnaient très lentement. Imprimer lorsqu’une opération réussissait n’était qu’une perte de temps et de papier.
Voici une vidéo où vous pouvez en voir et en entendre un en action.
Les programmeurs aiment les programmes silencieux pour construire des pipelines
Avoir des programmes sans sortie par défaut permet également de créer des programmes dans des pipelines. Il s'agissait d'un élément clé de la « philosophie Unix » qui influence encore aujourd'hui une grande partie du développement de Linux.
La manière traditionnelle de concevoir des programmes en ligne de commande dans les systèmes de type Unix consiste à enchaîner la sortie à l'entrée d'un autre programme, parfois plusieurs, appelé pipeline, à partir du | opérateur. Dans cette optique, si ls produisait quelque chose comme « 0 fichier trouvé », d'autres programmes devraient travailler dessus. Ne pas avoir de fichiers est une information inutile pour les commandes plus loin dans le pipeline.
Par exemple, vous pouvez diriger la commande ls vers wc :
ls | wc
Sans aucun fichier de ls, wc affichera un nombre de caractères de 0.
Comme l'a écrit Eric S. Raymond dans « The Art of Unix Programming », « les programmes qui babillent n'ont pas tendance à bien fonctionner avec d'autres programmes ».
Comment vérifier l'état de sortie pour voir si une opération a réussi
Les programmes Linux imprimeront généralement un message d'erreur standard en cas de problème. En règle générale, l'erreur standard est transmise au terminal, bien qu'elle puisse être redirigée vers un autre fichier.
Un programme de ligne de commande définit une variable appelée état de sortie une fois son exécution terminée. Un état de sortie de 0 indique un succès, tandis que tout autre nombre indique une erreur. Vous pouvez vérifier l'état de sortie de la dernière commande exécutée avec le $? variable:
echo $?
De nombreux shells peuvent être configurés pour afficher une erreur à l'invite si la dernière commande s'est terminée avec un état de sortie différent de zéro. Voici un exemple avec l'extension Oh My Zsh pour zsh, où l'invite devient rouge pour indiquer une erreur :
Les commandes qui peuvent prendre beaucoup de temps, comme la mise à jour de vos packages, génèrent généralement plus de résultats.
Les programmes Linux ont hérité du style minimaliste Unix, et cela inclut leur sortie. Vous savez maintenant pourquoi vous pouvez parfois recevoir une invite vide lorsque vous exécutez certaines commandes Linux dans le terminal. Sous Linux, le meilleur résultat peut parfois être nul.