Linux 实用程序在运行管道命令时是否智能?

Linux 实用程序在运行管道命令时是否智能?

我刚刚在终端中运行了几个命令,我开始想知道,Unix/Linux 在运行管道命令时是否采用快捷方式?

例如,假设我有一个包含 100 万行的文件,其中前 10 行包含hello world.如果运行该命令,grep "hello world" file | head第一个命令是否会在找到 10 行后立即停止,还是会先继续搜索整个文件?

ベストアンサー1

有点。 shell 不知道您正在运行的命令将执行什么操作,它只是将一个命令的输出连接到另一个命令的输入。

如果grep找到超过 10 行“hello world”,head则将获得所需的所有 10 行,并关闭管道。这将导致grep被 SIGPIPE 杀死,因此不需要继续扫描非常大的文件。

おすすめ記事