Leiten Sie die Standardausgabe zweier Programme aneinander weiter

Leiten Sie die Standardausgabe zweier Programme aneinander weiter

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 teean 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.

verwandte Informationen