有谁知道 bash 如何处理通过管道发送数据?
cat file.txt | tail -20
此命令是否将 file.txt 的所有内容打印到缓冲区中,然后由 tail 读取?还是这个命令,比如说,逐行打印 file.txt 的内容,然后在每一行暂停以便 tail 处理,然后要求更多数据?
我问的原因是我正在嵌入式设备上编写一个程序,该程序基本上对一些数据块执行一系列操作,其中一个操作的输出作为下一个操作的输入发送。我想知道linux(bash)是如何处理这个问题的,所以请给我一个一般性的答案,而不是当我运行“cat file.txt | tail -20”时会发生什么。
编辑:Shog9 指出了一篇相关的 Wikipedia 文章,这并没有直接引导我找到这篇文章,但它帮助我找到了这个:http ://en.wikipedia.org/wiki/Pipeline_%28Unix%29#Implementation确实有我正在寻找的信息。
我很抱歉没有说清楚。当然,您正在使用管道,当然您正在使用命令各个部分的标准输入和标准输出。我以为这太明显了,无法说明。
我要问的是如何处理/实施。既然两个程序都不能同时运行,那么数据是如何从标准输入发送到标准输出的呢?如果第一个程序生成数据的速度明显快于第二个程序会怎样?系统是否只运行第一个命令直到它被终止或者它的标准输出缓冲区已满,然后继续执行下一个程序,等等循环直到没有更多数据需要处理或者是否有更复杂的机制?