复制stdout,将其传递给两个不同的命令,从最终程序的stdin收集结果

Kim*_*uss 8 unix shell pipe

假设我有三个程序:生成器,它生成输入到处理器的输入数据和验证器,可以检查处理器输出是否对于给定输入是正确的(因此它需要两个文件).

我现在做的是:

generator> in.txt && processor <in.txt> out.txt && cat in.txt out.txt | 验证

是否可以在不使用显式文件的情况下实现相同的结果?我已经阅读过关于使用tee和进程替换来复制输入的内容,但我没有找到将两个流收集到单个流中以便最后一步的方法.

eri*_*rik 5

如果您不想\xe2\x80\x99 不想在慢速硬盘上创建真实文件,则可以使用 FIFO(先进先出),由于其行为,也称为命名管道。

\n\n
mkfifo myfifo\ngenerator | tee myfifo | processor | verifier myfifo\n
Run Code Online (Sandbox Code Playgroud)\n\n

这会将生成的内容流式传输到tee,后者将其复制到myfifostdout,再通过管道传输processorverifier。并且verifier还从 获取流myfifo

\n


Dav*_*rra 1

如果您可以将处理器代码更改为按顺序输出stdin,那么stdout一行命令可能会像这样简单:

generator | processor | verifier
Run Code Online (Sandbox Code Playgroud)

否则你可以使用这个

generator | tee in.txt | processor | verifier in.txt
Run Code Online (Sandbox Code Playgroud)

tee 命令复制并将stdout一个流重定向到下一个in.txt管道,将另一个流重定向到下一个管道。在这种情况下,您必须进行修改以verifier读取 的输出,并且 生成的文件作为参数传递。processorstdingenerator

我知道您正在寻找一种复制并重定向到的方法,stdinstdout我不知道这一点,老实说,我认为这是不可能的