Tube (shell)

Les shell des systèmes d'exploitation de type Unix disposent d'un mécanisme appelé tube, pipeline ou pipe (). Ce mécanisme permet de chaîner des processus de sorte que la sortie d'un processus (stdout) alimente directement l'entrée (stdin) du suivant. Chaque connexion est implantée par un tube anonyme. Les programmes filtres sont souvent utilisés dans cette configuration. Douglas McIlroy a inventé ce concept pour les shells Unix et le nom anglais découle de l'analogie avec un pipeline physique.

Shell Unix 
Le symbole utilisé pour créer des tubes dans les shells Unix est la barre verticale |, appelée communément tube ou pipe par extension.

Par exemple : programme1 | programme2

Le programme programme1 est exécuté par le système qui envoie les résultats au programme2 qui à son tour renvoie les résultats sur la sortie standard du système.

Le pipe est très utilisé sur Unix, par exemple pour associer plusieurs commandes dont on enchaîne les traitements.

Par exemple, la commande :

 cut -d" " -f1 < access.log | sort | uniq -c | sort -rn | less

Permet d'extraire et d'afficher les adresses IP des clients ayant accédé le plus fréquemment à un serveur web Apache.

Pseudo-tubes 
Dans les systèmes d'exploitation monotâches comme le MS-DOS, les processus chainés doivent être exécutés séquentiellement, c'est-à-dire l'un après l'autre. La sortie de chaque processus est alors enregistrée dans un fichier temporaire, qui est ensuite lu par le processus suivant. Dès lors d'une part la taille requise sur disque pour effectuer ces commandes peut être très importante et donc l'exécution très lente, d'autre part l'acquisition permanente est impossible puisqu'elle ne rendra jamais « la main » et enfin ces commandes ne peuvent pas permettre de traiter des acquisitions de données en temps réel puisque tout doit être écrit sur les disques avant que le second traitement soit effectué. La syntaxe en revanche est identique à celles des tubes des shell UNIX. Dès lors on parle de pseudo-tubes.

Le traitement de la commande « dir | sort | more » par l'interpréteur de commandes permet d'afficher par page la liste des fichiers du répertoire de manière triée. Pour ce faire, le système exécute :
 création d'un fichier temporaire 1.tmp dans le répertoire pointé par la variable %TEMP% ou dans le répertoire courant si %TEMP% n'est pas renseigné
 exécution de la commande « dir » et enregistrement des données dans le fichier 1.tmp
 création d'un fichier temporaire 2.tmp
 exécution de la commande « sort » avec en entrée le fichier 1.tmp et sortie dans le fichier 2.tmp
 exécution de la commande « more » avec pour entrée le fichier 2.tmp et sortie sur la sortie standard
 effacement de 1.tmp et 2.tmp

Windows PowerShell 
Windows PowerShell, l'équivalent des shell pour les systèmes d'exploitation multitâches de Microsoft, met aussi en œuvre ce genre de mécanisme. Mais contrairement aux tubes UNIX qui permettent de manipuler un flux de données brut sous forme d'octet ou de bits, les tubes de PowerShell permettent de manipuler des objets .NET, méthode qui, implicitement par l'interpréteur de commande, vérifie la nature du flux.

Notes et références

Articles connexes 
 Il est possible sous Unix d'utiliser les mécanismes des internes du système pour effectuer ce type de manipulation, voir tube
 flux standard

Communication inter-processus
Unix

sv:Vertikalstreck#Datavetenskap