Tout le monde sait comment créer un tube unidirectionnel entre deux programmes (bind stdout
du premier et stdin
du second) :first | second
.
Mais comment créer un tube bidirectionnel, c'est-à-dire une liaison croisée stdin
et stdout
de deux programmes? Existe-t-il un moyen simple de le faire dans un shell ?
Réponse acceptée :
Si les canaux de votre système sont bidirectionnels (comme ils le sont sur Solaris 11 et certains BSD au moins, mais pas sur Linux) :
cmd1 <&1 | cmd2 >&0
Méfiez-vous cependant des blocages.
Notez également que certaines versions de ksh93 sur certains systèmes implémentent des canaux (|
) en utilisant une paire de sockets . les paires de sockets sont bidirectionnelles, mais ksh93 ferme explicitement la direction inverse, de sorte que la commande ci-dessus ne fonctionnerait pas avec ces ksh93, même sur les systèmes où les canaux (tels que créés par le pipe(2)
appel système) sont bidirectionnels.