GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie erstelle ich eine bidirektionale Pipe zwischen zwei Programmen?

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.


Linux
  1. Wie wähle ich das erste Auftreten zwischen zwei Mustern aus, die sie enthalten?

  2. Wie extrahiert man Protokolle zwischen zwei Zeitstempeln?

  3. Wie synchronisiere ich Dateien zwischen zwei Fernbedienungen?

  4. Machen Sie Tail -f Exit auf einem kaputten Rohr?

  5. Linux – Wie lösche ich Dateien, die zwischen zwei Mal erstellt wurden?

So finden Sie den Unterschied zwischen zwei Verzeichnissen mit Diff- und Meld-Tools

Wie man eine Datei unter Linux ausführbar macht

So synchronisieren Sie Dateien automatisch zwischen zwei Linux-Servern

So verbinden und teilen Sie Daten zwischen zwei Linux-Systemen

Wie kann man Ubuntu dazu bringen, Touchpad-Scrolling zu unterstützen?

So machen Sie einen Benutzer zum Administrator in Debian 11