我正在测试随机数生成器,我需要将它的输出传递给各种测试。由于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)。我该怎么做才能改变这种行为?
答案 0 :(得分:0)
某些版本的tee
already support --output-error=warn
表示输出错误是通过STDERR诊断出来的,但tee
并不会在写入管道时出错。不幸的是,我的笔记本电脑上的tee
非常基本,所以我无法检查此选项是否符合您的测试用例。
您可能需要使用最长的测试用例或类似>/dev/null
的内容替换最终的>(head -c1000G)
,否则tee
将继续将数据传输到/dev/null
。