2つのプログラムの標準出力を相互にパイプする

2つのプログラムの標準出力を相互にパイプする

私には 2 つのプログラムがあり、そのうちの 1 つは最初に何かを印刷し、標準の IO を使用して相互に通信する必要があります。

Bash で 2 つのプログラムの stdout を相互にパイプする方法はありますか? C で fork と dup を使用してこれを行うことはできますが、純粋な Bash でこれを行う方法はありますか?

答え1

パイプを「ループ」する名前付き FIFO を作成します。

mkfifo myfifo
<myfifo program1 | program2 >myfifo
rm myfifo

どのプログラムも最初に何も印刷しない場合でも、データを FIFO に「注入」して、次のように受信することができますprogram1

# from another console
echo start >myfifo

通信を観察/保存するには、tee適切な場所で使用します。例:

<myfifo program1 | program2 | tee myfifo
<myfifo program1 | tee /dev/tty ./log1 | program2 | tee ./log2 >myfifo

全体は で動作しますsh。このソリューションには Bash に固有のものは何もありません。

読んでくださいこの答えデッドロックにつながる可能性のあるシナリオについて。

関連情報