複数のストリームを単一のストリームに多重化する - Bash

複数のストリームを単一のストリームに多重化する - Bash

私はしばらくこの問題を経験しました。

想像する
私がしたいのは、CLIを使用してプログラムを実行することです。プログラムは一度に1つのコマンドを受けて実行します。ほとんどの場合、これらのコマンドは一括して実行されます。したがって、1つのストリームから一連のコマンドをキャプチャすることは非常に効率的ですが、時には手動介入のためにキーボードを介していくつかの追加コマンドを送信したいと思います。

私はそれを解決しようとしています
以下のように名前付きパイプを使用し、以下に示すようにすべて同じファイル記述子にリダイレクトしました。

先入選出

$ mkfifo /tmp/testpipe
$ mknod /tmp/testpipe p

リダイレクト

{ cat /tmp/testpipe &
  cat - &
  wait; } | consumer_process

ここに画像の説明を入力してください。

引用:複数のパイプを一緒に接続する「ティー」の逆の機能はありますか?

質問
上記の設定を使用すると、最初に名前付きパイプに何かをプッシュするときに期待どおりに機能しますが、2番目にパイプに何かをプッシュすると、消費者プロセスに到達できません。

問題を解決しようとして失敗しました。
名前付きパイプをキャプチャし、反対側の端でエコーしてみてください。最初は効果がありましたが、2回目には効果がありませんでした。

初学期

cat /tmp/testpipe &

第二学期

echo "TESTING123" > /tmp/testpipe   --> Received on term 1
echo "TESTING123" > /tmp/testpipe   --> Nothing received on term 1

この問題を解決したり、これをより簡単に行う方法はありますか?

関連情報