管道排序和 grep 的不同行为

管道排序和 grep 的不同行为

对我来说很奇怪的是,管道|对于以下命令的行为有所不同:

curl http://norvig.com/big.txt |  sort


curl http://norvig.com/big.txt |  grep employ

在第一个命令中,管道等待直到curl执行终止。在第二个命令中,它将中间输出传递到grepwhile curlis running。

什么决定了管道的行为方式?

更新:

问题不在于做什么sortgrep能做什么。问题是管道如何知道呢?

答案1

我认为原因如下:

sort在完成读取输入之前无法开始排序(或至少无法开始打印结果)。

grep一旦开始获取输入就可以开始工作并开始打印结果。

相关内容