每当我需要限制 shell 命令输出时,我都会使用 less 对结果进行分页:
cat file_with_long_content | less
它工作得很好,但我很好奇的是,即使输出永远不会结束, less 仍然有效,请考虑将以下脚本放在inf.sh
file:
while true; do date; done
然后我跑
sh inf.sh | less
而且它仍然能够再次对结果进行分页,那么说管道流式传输结果而不是等待命令完成后再输出结果是否正确?
是的,当你跑步时sh inf.sh | less
这两个命令并行运行。第一个进程写入管道的数据会(由内核)缓冲,直到第二个进程读取为止。如果缓冲区已满(即,如果第一个命令写入管道的速度快于第二个命令的读取速度),则下一个写入操作将阻塞,直到有更多空间可用。从空管道读取时会发生类似的情况:如果管道缓冲区为空但输入端仍然打开,则读取将阻塞以获取更多数据。
See the pipe(7) http://www.kernel.org/doc/man-pages/online/pages/man7/pipe.7.html手册了解详细信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)