可能性のある複製:
osx/linux:pipes to two processes?
1つのコマンドからの出力を他の2つのコマンドの入力にパイプし、それらを同時に実行する方法はありますか?
このようなもの:
$ echo 'test' |(cat) |(cat)
test
test
これを行いたいのは、USB SDRデバイスからFMラジオ信号を受信し、オーディオを生のPCMデータとして出力するプログラムがあるためです(.wavファイルのようですが、ヘッダーはありません)。信号は音楽がPOCSAGページャーデータの場合、それをデコーダープログラムにパイプしてページャーテキストを復元する必要があります。ただし、信号を聞きたいので、データが入ってくるかどうかがわかります。 (それ以外の場合、デコーダーが壊れているか、ブロードキャストされているデータがないかどうかはわかりません。)したがって、ページャーデコーダーにデータをパイプするだけでなく、同じデータをplay
コマンドにパイプする必要があります。 。
現在私はそれを行う方法を知っています-それをデコーダにパイプして無音でデータを読み取るか、それをplay
にパイプしてデコードされたテキストを表示せずにそれを聞きます。
同じデータを両方のコマンドにパイプして、テキストを読み、オーディオを聞くにはどうすればよいですか?
tee
は重複したデータをファイルに書き込むだけなので使用できませんが、データをリアルタイムで処理する必要があります。
tee
とmkfifo
の両方を使用する場合は問題ありません。
mkfifo pipe
cat pipe | (command 1) &
echo 'test' | tee pipe | (command 2)
名前のないパイプを介してそれを行う方法があります(Linuxでテスト済み):
(( echo "hello" |
tee /dev/fd/5 |
sed 's/^/1st occure: /' >/dev/fd/4
) 5>&1 |
sed 's/^/2nd command: /'
) 4>&1
与える:
2nd command: hello
1st occure: hello
このサンプルでは、somefile.ext
をダウンロードして保存し、md5sumを計算して、sha1sumを計算します。
(( wget -O - http://somewhere.someland/somepath/somefile.ext |
tee /dev/fd/5 |
md5sum >/dev/fd/4
) 5>&1 |
tee somefile.ext |
sha1sum
) 4>&1
たぶんtee
コマンドを見てください。入力をファイルに出力するだけですが、入力を標準出力に出力します。だから次のようなもの:
echo "Hello" | tee try.txt | <some_command>
「Hello」という内容のファイルを作成し、<some_command>
の引数としてhelloを渡します。