Jeder weiß, wie man eine unidirektionale Pipe zwischen zwei Programmen erstellt (bind stdout
der ersten und stdin
des zweiten):first | second
.
Aber wie man eine bidirektionale Pipe erstellt, d.h. cross-bind stdin
und stdout
von zwei Programmen? Gibt es eine einfache Möglichkeit, dies in einer Shell zu tun?
Akzeptierte Antwort:
Wenn Pipes auf Ihrem System bidirektional sind (wie sie es zumindest auf Solaris 11 und einigen BSDs sind, aber nicht auf Linux):
cmd1 <&1 | cmd2 >&0
Hüten Sie sich jedoch vor Deadlocks.
Beachten Sie auch, dass einige Versionen von ksh93 auf einigen Systemen Pipes implementieren (|
) mit einem Socket-Paar . Socket-Paare sind bidirektional, aber ksh93 schließt ausdrücklich die umgekehrte Richtung, sodass der obige Befehl mit diesen ksh93s nicht funktionieren würde, selbst auf Systemen, auf denen Pipes (wie von pipe(2)
erstellt) verwendet werden Systemaufruf) sind bidirektional.