
Ich habe zwei Programme, eines druckt zuerst etwas aus, sie müssen über ihre Standard-E/A miteinander kommunizieren.
Gibt es in Bash eine Möglichkeit, die Standardausgabe zweier Programme untereinander zu vertauschen? Ich weiß, dass ich das in C mit Forks und Dups machen könnte, aber gibt es eine Möglichkeit mit reinem Bash?
Antwort1
Erstellen Sie ein benanntes FIFO, das die Pipe „schleift“:
mkfifo myfifo
<myfifo program1 | program2 >myfifo
rm myfifo
Auch wenn keines der Programme zuerst etwas druckt, können Sie Daten in den FIFO „einfügen“, sodass sie von folgenden Stellen empfangen werden program1
:
# from another console
echo start >myfifo
Um die Kommunikation zu beobachten/aufzubewahren, verwenden Sie sie tee
an den richtigen Stellen. Beispiele:
<myfifo program1 | program2 | tee myfifo
<myfifo program1 | tee /dev/tty ./log1 | program2 | tee ./log2 >myfifo
Das Ganze funktioniert in sh
, diese Lösung enthält nichts Bash-spezifisches.
Bitte lesen Siediese Antwortüber mögliche Szenarien, die zu einer Sackgasse führen.