Comme dF dit, bash
permet d'utiliser l' >(…)
construire l'exécution d'une commande à la place d'un nom de fichier. (Il y a aussi l' <(…)
construire de substituer à la sortie d'une autre commande à la place d'un nom de fichier, mais c'est sans importance maintenant, je le mentionne juste pour être complet).
Si vous n'avez pas de bash, ou en cours d'exécution sur un système avec une ancienne version de bash, vous pouvez le faire manuellement ce que bash n', en faisant usage de FIFO fichiers.
Le générique de la façon d'obtenir ce que vous voulez, c'est:
- décidez combien de processus devrait recevoir la sortie de votre commande, et de créer autant de Peps, de préférence sur un mondial dossier temporaire:
les sous-processus="a b c d"
mypid=$$
for i in $sous-processus # de cette façon, nous sont compatibles avec tous les sh-dérivé de coquillages
faire
mknod /tmp/pipe.$mypid.$je p
fait
- démarrer tous vos sous-processus en attente d'entrée de la Fifo:
for i in $sous-processus
faire
tr 1 $i </tmp/pipe.$mypid.$j'ai & # arrière-plan!
fait
- l'exécution de votre commande le coup de la Fifo:
proc1 | tee $(for i in $sous-processus; do echo /tmp/pipe.$mypid.$i; done)
for i in $sous-processus; faire rm /tmp/pipe.$mypid.$i; done
REMARQUE: pour des raisons de compatibilité, je ne l' $(…)
avec backquotes, mais je n'ai pas pu écrire cette réponse (backquote est utilisé dans). Normalement, l' $(…)
est assez vieux pour travailler, même dans les anciennes versions de ksh, mais si ce n'est pas le cas, placez l' …
part dans les backquotes.