一些编码实验(在试图找到编码问题的简短答案时进行)导致了一些有趣的惊喜:
seq 2 | while head -n 1 ; do : ; done
输出(按 Control-C否则将永远浪费 CPU 周期):
1
^C
相同,但使用重定向的输入文件而不是管道输入:
seq 2 > two
while head -n 1 ; do : ; done < two
输出(点击Control-C):
1
2
^C
问题:
为什么
while
循环不会停止seq 2 | head -n 1
?为什么重定向输入会比管道输入产生更多的输出?
上面的代码在最近的Lubuntudash
上进行了测试。两者都来自coreutils(版本8.25-2ubuntu2)包。bash
seq
head
绕过必须按(Ctrl-C) 的方法:
timeout .1 sh -c "seq 2 > two ; while head -n 1 ; do : ; done < two"
1
2
timeout .1 sh -c "seq 2 | while head -n 1 ; do : ; done"
1