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

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

STDOUT出力を生成する複数のプロセスがあり、STDERR番号付きのファイル記述子にリダイレクトされ、すべての出力を単一のファイルに収集しようとしています。

素直に頑張った

[input processes] | cat <3 <4 <5 2>&1 >[output file]

しかし、もちろんこれはうまくいきません。なぜなら、それはSTDIN後続のパイプから読み取る前にそのパイプが閉じるのを待つので、他のパイプのバッファがいっぱいになると私のプロセスが中断されるからです。

どんな提案がありますか?

ベストアンサー1

出力を1つにまとめるのは実際には二重性ではありませんteetee入力のコピーを複数作成しますが、出力の照合にはデータのマージは含まれません。

出力ソースを結合するには、すべて同じファイル記述子にリダイレクトするだけです。一般に、ソースインターリーブはやや予測できないが、パイプへの書き込みは十分に小さい。原子性保証。 (読書側で境界を識別できることは別のことです。.)

{ data_source_1 &
  data_source_2 &
  wait; } >merged_output

複数のファイル記述子から入力を受け取り、それらを結合するには、各ファイル記述子を渡します。

{ cat <&3 & cat <&4 & wait; } >merged_ouput

ただし、通常、すべてのファイル記述子を同じ宛先にリダイレクトできます。

… 3>merged_ouput 4>&3

おすすめ記事