Everyone knows how to make unidirectional pipe between two programs (bind stdout
of first one and stdin
of second one): first | second
.
But how to make bidirectional pipe, i.e. cross-bind stdin
and stdout
of two programs? Is there easy way to do it in a shell?
Best Answer
If pipes on your system are bidirectional (as they are on Solaris 11 and some BSDs at least, but not Linux):
Beware of deadlocks though.
Also note that some versions of ksh93 on some systems implement pipes (
|
) using a socket pair. socket pairs are bidirectional, but ksh93 explicitly shuts down the reverse direction, so the command above wouldn't work with those ksh93s even on systems where pipes (as created by thepipe(2)
system call) are bidirectional.