对我来说很奇怪的是,管道|
对于以下命令的行为有所不同:
curl http://norvig.com/big.txt | sort
curl http://norvig.com/big.txt | grep employ
在第一个命令中,管道等待直到curl
执行终止。在第二个命令中,它将中间输出传递到grep
while curl
is running。
什么决定了管道的行为方式?
更新:
问题不在于做什么sort
和grep
能做什么。问题是管道如何知道呢?
答案1
我认为原因如下:
sort
在完成读取输入之前无法开始排序(或至少无法开始打印结果)。
grep
一旦开始获取输入就可以开始工作并开始打印结果。