La sortie d'une commande peut-elle être canalisée vers deux autres commandes?

27

Comment puis-je diriger la sortie d'une commande vers l'entrée de deux autres commandes simultanément?

Richard Hoskins
la source
4
Oui. Voir cette question de stackoverflow: stackoverflow.com/questions/670784/…
Blair Conrad

Réponses:

56

Il semble que la teecommande fera ce que vous voulez.

La clé est d'utiliser

>( )

pour la substitution de processus . Avec tee, utilisez le modèle suivant:

tee >(proc1) >(proc2) >(proc3) | proc4

Donc, si vous souhaitez utiliser la sortie de lscomme entrée pour deux grepprogrammes différents , enregistrer la sortie de chacun grepdans des fichiers différents et diriger tous les résultats less, essayez:

ls -A | tee >(grep ^[.] > hidden-files) >(grep -v ^[.] > normal-files) | less

Les résultats de la ls -Aseront «canalisés» dans les deux grepart. Le fichier hidden-filesaura le contenu de la sortie du premier grep, et normal-filesaura les résultats du second grep. Tous les fichiers seront affichés dans le pager less. EDIT : ce que vous voyez lessest la même sortie exacte de ls -A, pas le résultat du greps. Si vous souhaitez modifier la sortie de ls -Aà less(par exemple, permuter l'ordre afin que les fichiers normaux soient répertoriés avant ceux masqués), essayez ceci:

ls -A | tee >(grep ^[.]) >(grep -v ^[.]) >/dev/null | less

Sans >/dev/null, la sortie de greps serait ajoutée à la sortie de ls -Aau lieu de la remplacer.

la source

Ben
la source
3
Celui-ci est très bon !
hayalci
3
+1 parce que même après 10 ans de scripts shell, je n'avais jamais vu ça!
jtimberman
6

Utilisez "tee".

Exemple:

grep someSearchString someFile | tee /dev/tty | wc -l > grepresult

Cela enverra la sortie de la commande grep à la fois au terminal et à wc (dont la sortie est à son tour redirigée vers le fichier grepresult).

"Tee" est expliqué dans l'article de Wikipedia tee (commande) . Central est: "La commande tee lit l'entrée standard, puis écrit son contenu sur la sortie standard et le copie simultanément dans le ou les fichiers ou variables spécifiés.".

Peter Mortensen
la source