可能重复:
osx/linux:管道分为两个进程?
有没有办法将输出从一个命令输入到另外两个命令的输入中,同时运行它们?
像这样的东西:
$ echo 'test' |(cat) |(cat)
test
test
Run Code Online (Sandbox Code Playgroud)
我想这样做的原因是我有一个程序从USB SDR设备接收FM无线电信号,并输出音频作为原始PCM数据(如.wav文件,但没有标题.)由于信号不是音乐但POCSAG寻呼机数据,我需要将其传输到解码器程序以恢复寻呼机文本.但是我也想听信号,所以我知道是否有任何数据进入.(否则我无法判断解码器是否损坏或者没有广播数据.)因此,除了将数据传输到寻呼机解码器之外,我还需要将相同的数据传输到play
命令.
目前我只知道如何做一个 - 将其传输到解码器并静默读取数据,或将其传输到play
并听到它而不会看到任何解码文本.
如何将相同的数据传输到两个命令,以便我可以阅读文本并听到音频?
我无法使用tee
,因为它只将重复数据写入文件,但我需要实时处理数据.
Tim*_*een 30
如果你同时使用tee
和它应该没问题mkfifo
.
mkfifo pipe
cat pipe | (command 1) &
echo 'test' | tee pipe | (command 2)
Run Code Online (Sandbox Code Playgroud)
F. *_*uri 11
有一种方法可以通过未命名的管道(在linux下测试)来做到这一点:
(( echo "hello" |
tee /dev/fd/5 |
sed 's/^/1st occure: /' >/dev/fd/4
) 5>&1 |
sed 's/^/2nd command: /'
) 4>&1
Run Code Online (Sandbox Code Playgroud)
给:
2nd command: hello
1st occure: hello
Run Code Online (Sandbox Code Playgroud)
这个示例将允许您下载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
Run Code Online (Sandbox Code Playgroud)
也许看看tee
命令。它所做的只是将其输入打印到文件中,但它也将其输入打印到标准输出中。所以像:
echo "Hello" | tee try.txt | <some_command>
Run Code Online (Sandbox Code Playgroud)
将创建一个内容为“Hello”的文件,并让“Hello”(流经管道)最终成为<some_command>
的标准输入。
归档时间: |
|
查看次数: |
24500 次 |
最近记录: |