Tutti sanno come creare pipe unidirezionali tra due programmi (bind stdout
del primo e stdin
del secondo):first | second
.
Ma come creare pipe bidirezionali, ovvero cross-bind stdin
e stdout
di due programmi? C'è un modo semplice per farlo in una shell?
Risposta accettata:
Se le pipe sul tuo sistema sono bidirezionali (come lo sono almeno su Solaris 11 e alcuni BSD, ma non su Linux):
cmd1 <&1 | cmd2 >&0
Attenzione agli stalli però.
Nota anche che alcune versioni di ksh93 su alcuni sistemi implementano le pipe (|
) utilizzando una coppia di socket . le coppie di socket sono bidirezionali, ma ksh93 interrompe esplicitamente la direzione inversa, quindi il comando sopra non funzionerebbe con quei ksh93 anche su sistemi in cui pipe (come creato da pipe(2)
chiamata di sistema) sono bidirezionali.