尝试 grep 在 5 次迭代时停止而循环,以便 / tmp / foo 应该只有 5 行:
n=1
while [ $n -le 2000 ]
do
echo $n
n=$(( $n + 1 ))
done | tee /tmp/foo | grep -q ^5
检查计数:
wc -l < /tmp/foo
输出:
34
每次重复运行以上返回不同的数字,但它不是非常随机 - 在 bash 中运行上述5000次会产生大约1500 9 s,例如,在破折号中运行5000次会导致157 106 s。
这些结果似乎比初始实验更有趣。这段代码中发生了什么?
答案 0 :(得分:2)
管道是异步的。虽然tee
将在grep
退出并关闭其结束后第一次尝试写入管道末尾时退出,但无法知道有多少行tee
将写入< em>之前 grep
实际上是这样做的。这完全取决于OS调度程序。