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 tee
commande 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 ls
comme entrée pour deux grep
programmes différents , enregistrer la sortie de chacun grep
dans 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 -A
seront «canalisés» dans les deux grep
art. Le fichier hidden-files
aura le contenu de la sortie du premier grep
, et normal-files
aura les résultats du second grep
. Tous les fichiers seront affichés dans le pager EDIT : ce que vous voyez less
.less
est la même sortie exacte de ls -A
, pas le résultat du grep
s. 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 grep
s serait ajoutée à la sortie de ls -A
au 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.".