110 votes

Comment expliquer simplement le fonctionnement des tuyaux dans Bash ?

J'utilise souvent des pipes dans Bash, par exemple :

dmesg | less

Bien que je sache ce que cela donne, il faut dmesg et me permet de la faire défiler avec less Je ne comprends pas ce qu'est la | est en train de faire. S'agit-il simplement du contraire de > ?

  • Existe-t-il une explication simple ou métaphorique à ce que l'on appelle l'état d'urgence ? | fait ?
  • Que se passe-t-il lorsque plusieurs tuyaux sont utilisés dans une même ligne ?
  • Le comportement des pipes est-il cohérent partout où il apparaît dans un script de Bash ?

6voto

Xander Points 1252

Les tuyaux sont très simples.

Vous avez le résultat d'une commande. Vous pouvez utiliser cette sortie comme entrée d'une autre commande à l'aide de pipe. Vous pouvez utiliser autant de commandes que vous le souhaitez.

ex : ls | grep my | grep files

La première étape consiste à dresser la liste des fichiers présents dans le répertoire de travail. Cette sortie est vérifiée par la commande grep pour le mot "my". La sortie de cette commande est ensuite transmise à la deuxième commande grep, qui recherche finalement le mot "files". C'est tout.

4voto

franka Points 514

L'opérateur pipe prend la sortie de la première commande et la "pipe" vers la seconde en connectant stdin et stdout. Dans votre exemple, au lieu que la sortie de la commande dmesg aille sur stdout (et soit affichée sur la console), elle va directement dans la commande suivante.

2voto

shiplu.mokadd.im Points 28895
  • | met le STDOUT de la commande de gauche dans le STDIN de la commande de droite.

  • Si vous utilisez plusieurs tuyaux, il s'agit simplement d'une chaîne de tuyaux. La sortie de la première commande est réglée sur l'entrée de la deuxième commande. La sortie de la deuxième commande est réglée sur l'entrée de la commande suivante. Et ainsi de suite.

  • Il est disponible dans tous les interpréteurs de commandes basés sur Linux/Widows.

2voto

Minecraftchest1 Points 27

Toutes ces réponses sont excellentes. Une chose que j'aimerais juste mentionner, c'est qu'un pipe dans bash (qui a le même concept qu'un pipe sous unix/linux ou Windows) est exactement comme un pipe dans la vie réelle. Si vous considérez le programme avant le pipe comme une source d'eau, le pipe comme une conduite d'eau, et le programme après le pipe comme quelque chose qui utilise l'eau (avec la sortie du programme comme de l'eau), alors vous comprenez à peu près comment les pipes fonctionnent. N'oubliez pas que toutes les applications d'un pipeline fonctionnent en parallèle.

2voto

Fatih Points 46

En ce qui concerne la question de l'efficacité des tuyaux :

  • Une commande peut accéder aux données à son entrée et les traiter avant que la commande précédente ne soit terminée, ce qui signifie une utilisation efficace de la puissance de calcul si les ressources sont disponibles.
  • Pipe ne nécessite pas d'enregistrer la sortie d'une commande dans un fichier avant que la commande suivante n'accède à son entrée (il n'y a pas d'opération d'E/S entre deux commandes), ce qui permet de réduire les opérations d'E/S coûteuses et d'économiser de l'espace disque.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X