shell如何处理无限循环

无论何时我需要限制shell命令输出,我使用较less的分页结果:

cat file_with_long_content | less

这工作得很好,但是我很好奇,即使输出永远不会结束,仍然可以工作,请考虑在inf.sh文件中使用以下脚本:

while true; do date; done

然后我跑

sh inf.sh | less

而且它仍然可以对结果进行重新分页,所以说pipe道输出结果而不是等待命令完成才能输出结果是正确的吗?

Solutions Collecting From Web of "shell如何处理无限循环"

是的,当你运行sh inf.sh | less sh inf.sh | less两个命令并行运行。 第一个进程写入管道的数据被缓冲(由内核),直到被第二个进程读取。 如果缓冲区已满(即,如果第一个命令写入管道的速度快于第二个命令的读取速度),则下一个写入操作将被阻塞,直到有更多空间可用。 从空管道读取时会发生类似的情况:如果管道缓冲区为空,但输入端仍处于打开状态,读取将阻止更多数据。

有关详细信息,请参阅管道(7)手册。

它是正确的。 管道是流

你可以在很少的C代码行中编写你自己版本的less工具。 花点时间去做,包括对文件和管道的一个简短的研究,你会明白回答你自己的问题和更多:)。

亚历山大·桑德勒(Alexander Sandler)还提供了一篇名为“如何减少处理投入”的内容丰富的文章!

请参阅: less命令显示输出的时间