假设我有三个程序:生成器,它生成输入到处理器的输入数据和验证器,可以检查处理器输出是否对于给定输入是正确的(因此它需要两个文件).
我现在做的是:
generator> in.txt && processor <in.txt> out.txt && cat in.txt out.txt | 验证
是否可以在不使用显式文件的情况下实现相同的结果?我已经阅读过关于使用tee和进程替换来复制输入的内容,但我没有找到将两个流收集到单个流中以便最后一步的方法.
如果您不想\xe2\x80\x99 不想在慢速硬盘上创建真实文件,则可以使用 FIFO(先进先出),由于其行为,也称为命名管道。
\n\nmkfifo myfifo\ngenerator | tee myfifo | processor | verifier myfifo\n
Run Code Online (Sandbox Code Playgroud)\n\n这会将生成的内容流式传输到tee
,后者将其复制到myfifo
和stdout
,再通过管道传输processor
到verifier
。并且verifier
还从 获取流myfifo
。
如果您可以将处理器代码更改为按顺序输出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
读取 的输出,并且 生成的文件作为参数传递。processor
stdin
generator
我知道您正在寻找一种复制并重定向到的方法,stdin
但stdout
我不知道这一点,老实说,我认为这是不可能的