![在 bash 中使用两个命令读取相同的标准输入](https://linux22.com/image/1352889/%E5%9C%A8%20bash%20%E4%B8%AD%E4%BD%BF%E7%94%A8%E4%B8%A4%E4%B8%AA%E5%91%BD%E4%BB%A4%E8%AF%BB%E5%8F%96%E7%9B%B8%E5%90%8C%E7%9A%84%E6%A0%87%E5%87%86%E8%BE%93%E5%85%A5.png)
我想将输出通过管道传输到 bash 中的两个单独命令 <2,3>。最好的方法是什么?目前,我有以下脚本:
command source > output
command2 output &
command3 output &
输出文件约为 100G,次优方法是分别通过管道传输到命令 2 和命令 3。我认为可以更高效地完成。
答案1
在bash中:command source | tee >(command2) >(command3)
从这stackoverflow 问题。我还没有尝试过这种输出巨大的方法。
答案2
其他答案介绍了这个概念。 这是一个实际的演示:
$ echo "Leeroy Jenkins" | tee >(md5sum > out1) >(sha1sum > out2) > out3
$ cat out1
11e001d91e4badcff8fe22aea05a7458 -
$ echo "Leeroy Jenkins" | md5sum
11e001d91e4badcff8fe22aea05a7458 -
$ cat out2
5ed25619ce04b421fab94f57438d6502c66851c1 -
$ echo "Leeroy Jenkins" | sha1sum
5ed25619ce04b421fab94f57438d6502c66851c1 -
$ cat out3
Leeroy Jenkins
当然你也可以> /dev/null
用 out3 来代替。