Každý ví, jak vytvořit jednosměrné potrubí mezi dvěma programy (bind stdout
z prvního a stdin
druhého):first | second
.
Ale jak udělat obousměrnou rouru, tedy cross-bind stdin
a stdout
ze dvou programů? Existuje snadný způsob, jak to udělat v prostředí shell?
Přijatá odpověď:
Pokud jsou kanály ve vašem systému obousměrné (jako jsou na Solaris 11 a alespoň na některých BSD, ale ne na Linuxu):
cmd1 <&1 | cmd2 >&0
Dejte si však pozor na zablokování.
Všimněte si také, že některé verze ksh93 na některých systémech implementují roury (|
) pomocí páru zásuvek . páry zásuvek jsou obousměrné, ale ksh93 výslovně vypíná zpětný směr, takže výše uvedený příkaz by s těmito ksh93 nefungoval ani na systémech, kde potrubí (jak je vytvořeno pomocí pipe(2)
systémové volání) jsou obousměrné.