0

書き込み時にデータを消費せずに複数のプロセスから読み取ることができるファイル記述子を作成したいと思います。名前付きパイプは知っていますが、これは fifo であるため、データを取得できるプロセスは 1 つだけです。

私のユースケースは次のとおりです。git では、フックは stdin を使用して、処理するデータをフックに渡します。親フックから複数のサブフックを呼び出せるようにしたい。各サブフックは、親が受け取るのと同じ stdin データを取得する必要があります。パイプを使用するときに間違っていなければ、各サブプロセスは同じ stdin を取得しません。代わりに、stdin を読み取る最初のフックがデータを消費します。これは正しいです?

この時点で実行可能な唯一のオプションは、標準入力をファイルに書き込み、各サブプロセスからそのファイルを読み取ることです。別の方法はありますか?

4

1 に答える 1

1

おそらく、tee を使用してみることができます。

男ティー より:

tee - read from standard input and write to standard output and files

この方法でプロセスを使用する場合:tee >(parent) >(hook1) >(hook2) >(hookn)

(各フックは、必要に応じて異なるプロセス、コマンド、シェルです)

ここに例があります:

#!/bin/bash

while read stdinstream
do
    echo -n ${stdinstream} | tee >(parent) >(hook2) >(hook1)
done

編集:

あなたの場合、while ループが必要になるとは思いません。これで十分です。

read stdinstream
echo -n ${stdinstream} | tee >(parent) >(hook2) >(hook1)

うまくいけば、これはあなたを助けるでしょう.

于 2013-10-21T18:06:41.653 に答える