我正在测试随机数生成器,我需要将它的输出传递给各种测试。由于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
我希望tee会在所有子进程都结束后才结束,但事实并非如此。它将在第一个进程结束后停止(在本例中为head -c10M | sha1sum)。我能做些什么来改变这种行为呢?
发布于 2015-11-19 08:11:50
一些版本的tee already support --output-error=warn,这意味着输出错误是通过标准错误错误诊断的,但tee不会在写入管道时退出。不幸的是,我笔记本电脑上的tee是非常基本的,所以我无法检查这个选项是否满足您的测试用例。
您可能需要将最终的>/dev/null替换为最长的测试用例,或者替换为>(head -c1000G)之类的代码,否则tee将一直通过管道将数据传输到/dev/null。
https://stackoverflow.com/questions/33786735
复制相似问题