shell - 复制标准输出,将其通过管道传输到两个不同的命令,将两者的结果收集到最终程序的标准输入

标签 shell unix pipe

假设我有三个程序:发电机 ,产生输入数据馈送到 处理器 验证者 可以检查处理器输出对于给定输入是否正确(因此它需要两个文件)。

我目前做的是:

生成器 > in.txt && 处理器 < in.txt > out.txt && cat in.txt out.txt |验证者

是否可以在不使用显式文件的情况下实现相同的结果?我已经阅读了有关使用 tee 和 process 替换复制输入的信息,但我没有找到一种方法将两个流收集到一个流中以进行最后一步。

最佳答案

我没有测试过这个,但尝试:

{ generator | tee /dev/stderr | processor ; } 2>&1  | verifier

这将重定向 generator 的副本输出到 stderr .然后运行 ​​processorstdoutgenerator .然后将两者与管道结合到 verifier .

但是,这不能保证来自生成器和处理器的行到达验证器的顺序。

或者,您可以尝试如下流程替换:
( generator | tee >(processor) ) | verifier

关于shell - 复制标准输出,将其通过管道传输到两个不同的命令,将两者的结果收集到最终程序的标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14704766/

相关文章:

linux - 为什么 `su`一直问我密码

linux - 移动 script.sh 到 bin

unix - 替换 UNIX 文件第一行中的字符串

bash - Unix 管道和位置参数

angular - 包含 Angular 2+ 日期管道格式的文本

linux - 为什么系统调用失败?

shell - 如何在 Makefile 中定义全局 shell 函数?

unix - 当 ZFS 无法提供未损坏的数据时,程序会看到什么?

c - 如何从文件名的字符串数组中读取文件?

c++ - 如何从管道中读取 long ?