La tuyauterie est une forme spéciale de redirection, qui utilise une instance supplémentaire de TCC pour chaque instance de la conduite spécifiée dans la ligne de commande.
Vous pouvez créer un tuyau pour envoyer la sortie standard d' une commande (commande1) à l'entrée standard d'une autre commande (commande2), et éventuellement envoyer l'erreur standard:
ce qui est envoyé au tuyau |
format de la commande |
sortie standard uniquement |
command1 | command2 |
fusionner la sortie standard et l'erreur standard |
command1 |& command2 |
erreur standard uniquement |
command1 |&| command2 |
Par exemple, pour prendre la sortie de la commande ALIAS (qui affiche une liste de vos alias et de leurs valeurs) et l'envoyer à l'utilitaire externe SORT afin de générer une liste triée, vous utiliserez la commande :
alias | sort
Pour faire la même chose et transmettre la liste triée à la commande interne VIEW pour qu'elle soit visualisée:
alias | sort | view /s
Les commandes TEE et Y sont des "raccords de tuyauterie" qui ajoutent plus de flexibilité aux tuyauteries.
TCCLa sortie du logiciel est normalement en ANSI. Si vous souhaitez rediriger la sortie en Unicode, vous devez utiliser soit l'option de démarrage /U de la commande TCCou l'option Unicode Output dans TCMD.INI.
Comme pour la redirection, les pipes sont entièrement imbriquables. Par exemple, vous pouvez invoquer un fichier batch et envoyer toute sa sortie à une autre commande à l'aide d'un tube. Un tube sur une commande dans le fichier batch ne prend effet que pour cette commande ; lorsque la commande est terminée, la sortie revient au tube utilisé pour le fichier batch dans son ensemble. Vous pouvez également avoir deux ou plusieurs tuyaux fonctionnant simultanément si, par exemple, les tuyaux sont exécutés dans des fenêtres ou des processus différents.
Traitement de chaque ligne reçue d'un tube
Pour traiter chaque ligne de texte envoyée par le côté gauche d'un tube dans TCCvous pouvez utiliser la syntaxe ci-dessous :
dir | for %file in (@CON:) command %file
Cet exemple montre comment transmettre chaque ligne de données à une commande.
AVERTISSEMENTS : TCC met en œuvre les pipes en démarrant un nouveau processus pour le programme récepteur. Ce processus suit la procédure de démarrage standard de l'interpréteur de commandes, y compris l'exécution du fichier TCSTART, pour CHAQUE programme récepteur. Tous les programmes d'envoi et de réception s'exécutent simultanément ; le programme d'envoi écrit dans le tube et le programme de réception lit dans le tube. Lorsque le programme de réception détecte un signal de fin de fichier, il termine la lecture et le traitement des données du pipe et se termine. Lorsque vous utilisez des tuyaux avec TCCveillez à prendre en compte les conséquences possibles de l'utilisation d'un processus distinct pour exécuter le programme de réception, en particulier le fait qu'il ne peut pas créer/modifier/supprimer les variables d'environnement du programme d'envoi, et que l'inclusion d'une commande de changement de répertoire dans le fichierTCSTART peut entraîner l'exécution du nouveau processus dans un répertoire différent. Lorsque vous utilisez plus d'un tube dans une seule commande, par exemple dans le deuxième exemple ci-dessus avec LIST, chaque tube ajoute une autre instance de TCC. Si vous avez besoin d'exécuter le tube dans le même contexte, utilisez les tubes in-process (voir ci-dessous).
Tuyaux en cours de traitement
Les pipes in-process fonctionnent comme les pipes DOS à l'ancienne, en créant un fichier de sortie temporaire, en redirigeant STDOUT vers ce fichier, puis en redirigeant le fichier temporaire vers STDIN de la commande suivante. La syntaxe est la suivante :
command1 |! command2
C'est la même chose que faire :
command1 > temp.dat & command2 < temp.dat
mais elle est plus facile à taper et à lire.
L'avantage des pipes in-process est que la commande2 sera exécutée dans le même contexte que la commande1, ce qui vous permet de faire des choses comme modifier des variables d'environnement sans qu'elles soient supprimées lorsque la commande2 se termine. L'utilisation de ce type de "pseudo-pipe" présente également des inconvénients : il est généralement plus lent qu'un vrai pipe, il utilise de l'espace disque pour son fichier temporaire et command2 ne démarre pas tant que command1 ne s'est pas arrêtée.
Sortie ANSI, Unicode et UTF-8
Vous pouvez modifier le format de la sortie envoyée à un tube. Ces options remplacent les directives UnicodeOutput et UTF8Output du fichier TCMD.INI. Les options de sortie par pipe fonctionnent également avec les pipes in-process (i.e., |!:u). Remarque : ces options ne fonctionnent que pour rediriger la sortie des commandes internes et des fichiers batch de TCC.
| |:a | La sortie du tube est ANSI |
| |:u | La sortie par pipeline est UTF16 Unicode |
| |:8 ou |:u8 | La sortie par pipeline est UTF8 |