Comment puis-je diriger la sortie d'une commande vers l'entrée de deux autres commandes simultanément?
Comment puis-je diriger la sortie d'une commande vers l'entrée de deux autres commandes simultanément?
Réponses:
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 EDIT : ce que vous voyez less.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.
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.".