假设我们在当前目录中有很多文件(可能有十亿个),使用la
来显示所有文件是很可怕的。此时,只显示几个文件可能会有帮助。一个自然的想法是使用la | head -n 100
。
我的问题是,Linux shell有没有对这种管道链接的调用进行优化?如果是简单的运行,似乎要让la
扫描整个目录,然后让head
在头部砍掉很少的几行,但只需要稍微明显的优化,就是阅读100个文件的信息后直接返回,可以大大提高执行效率。那么shell会为我们做到这一点吗?
在我的尝试中,la | head -n
表现得很好。然而la
似乎也在很短的时间内返回结果,并开始长时间打印。我不确定是否存在优化。
1条答案
按热度按时间rqdpfwrv1#
当
head
终止时,由于所有行都被打印,它将导致shell终止与它相连的进程。这是因为它将接收到一个SIGPIPE
信号',而该信号的默认处理程序是优雅退出。因此,只要列出前100个文件,la
就会被终止。你可以用这个简单的命令管道来测试它:
如果没有
head
命令,循环会一直循环下去,但是在这里,它在一行之后就被终止了。'参见https://unix.stackexchange.com/questions/243350/why-does-using-yes-on-bash-pipelines-not-cause-infinite-loops