如何在使用进程替换时阻止tee截断stdin

时间:2015-11-18 17:39:42

标签: bash shell

我正在测试随机数生成器,我需要将它的输出传递给各种测试。由于RNG与测试相比相对较慢,我需要测试0.5-1TB的数据,我想出了使用tee将数据从RNG传递到所有测试的想法。主要的好处是我只需要生成数据。命令是

./RNG | tee >(test1) >(test2) >(test3) >/dev/null

但是,它没有按预期工作。当例如test1完成时,即使需要更多数据完成,tee也会停止所有其他测试。

您可以通过命令查看问题:

cat /dev/zero | tee >(head -c200M | md5sum) >(head -c10M | sha1sum) | wc -c

输出为:10559568

我希望在所有的儿童过程完成后,发球台会完成,但事实并非如此。它将在第一个进程完成后停止(在本例中为head -c10M | sha1sum)。我该怎么做才能改变这种行为?

1 个答案:

答案 0 :(得分:0)

某些版本的tee already support --output-error=warn表示输出错误是通过STDERR诊断出来的,但tee并不会在写入管道时出错。不幸的是,我的笔记本电脑上的tee非常基本,所以我无法检查此选项是否符合您的测试用例。

您可能需要使用最长的测试用例或类似>/dev/null的内容替换最终的>(head -c1000G),否则tee将继续将数据传输到/dev/null