URL: https://linuxfr.org/forums/programmation-shell/posts/un-pipeline-deux-pipelines-trois-pipelines Title: Un pipeline, deux pipelines, trois pipelines... Authors: Yth Date: 2005年06月16日T00:51:57+02:00 Tags: Score: 0 Bonjour ô forum. La question technique du jour : Je veux enchaîner deux pipes en shell (j'utilise bash), et que le tout s'effectue en parallèle et donc avoir au fur et à mesure la sortie des deux pipes. La commande ressemble à ça : programme1 | traitement | programme2 Typiquement dans programme1 on a un programme qui fait des trucs et indique son statut sur stdout. Dans traitement on a une commande awk assez complexe qui choppe le résultat de programme1 et le met en forme pour être compris par programme2. Et enfin programme2 va faire des trucs avec le résultat transformé par traitement de programme1. Le problème est le suivant : il faut que tout se fasse au fur et à mesure. programme1 peut durer très longtemps, et je veux que programme2 traite les sorties de programme1 passées à la moulinette traitement immédiatement. Or ce qu'il se passe c'est que le tout reste bêtement bloqué jusqu'à ce que programme1 ait fini, et alors programme2 analyse tout les résultats d'un coup. Ca ne vient ni de programme1, ni de traitement, ni de programme2, j'ai fait les tests suivants : programme1 | traitement : ça affiche bien le résultat traité au fur et à mesure dans mon terminal. for i in liste_de_résultats_type_traitement; do echo $i; sleep 1; done | programme2 : toutes les secondes programme2 m'affiche bien ce qui ressort de son analyse de la ligne fournie. Bref je soupçonne donc que ce comportement vient du chaînage de deux pipes, je suppose même qu'en fait le bash là ne dispose que d'un seul pipeline, donc il balance programme1, le pipe dans traitement, garde tout ça jusqu'à ce que le pipe soit libéré ie que programme1 ait fini, rebalance le pipe entre traitement et programme2, et zou. Donc il faudrait définir deux pipelines différents, mais la doc de bash n'indique pas si c'est possible, donc pas non plus "si oui comment"... Et il est aussi possible que je me fourvoie lamentablement... Alors si une âme charitable et éclairée, passant par ici, a la réponse à mes questionnements, et même une solution merveilleuse à mon problème, je suis preneur ! Merci d'avance, Yth.

AltStyle によって変換されたページ (->オリジナル) /