抑制原始输出

抑制原始输出

在脚本中使用管道时,shell 如何或如何抑制输出?假设我们有代码

cat file | wc -l

仅打印行数。 shell 将文件内容存储在哪里?与例如查找相同

find . -type f -exec grep -o 'hello' {} \; | wc -l

壳牌是怎么做到的呢?

答案1

这描述得很好这里这里

所以在你的例子中:

cat file | wc -l

产生的输出cat被定向到stdout通过管道连接到stdin的流的流wc

至于实际实现,每个管道都与一定大小的缓冲区相关联。该缓冲区填充了来自stdout左侧进程的数据,并由stdin右侧进程消耗。两个进程都是并行运行的,并且有一种机制可以阻止左侧进程,以防右侧进程无法足够快地消耗所有数据并且缓冲区已被填满。

欲了解更多详情,请前往这里

答案2

我没有完整的技术答案,但在您给出的示例中,shell 只是将标准输出文件描述符连接到第二个命令的标准输入文件描述符。除了当数据从一个进程传递到另一个进程时缓冲数据所需的任何内存之外,数据不会存储在任何地方。

相关内容