一些产生大输出的 shell 命令,例如git diff
,似乎在输出太长时巧妙地抛出一个寻呼机,但如果它恰好很小,就不会这样做。
这是如何运作的?每个单独的程序是否都有自己的代码来测量其输出并调用寻呼机?当它意识到输出太长时,它不会已经将一些打印到标准输出而无法取回吗?或者这是一个通用的 shell 功能,即使没有明确编程,任何程序都可以利用它?
需要明确的是:当然foo | less
会强制寻呼机并且foo | cat
不会强制寻呼机。我想知道是否有办法让任意foo
行为表现为foo | pager_if_needed
. 我也不是指从字面上实现pager_if_needed
(可能可以在 2-3 行 bash 中完成)和做alias foo="foo | pager_if_needed"
——因为这也不适用于bar
,baz
和其他所有内容。
它没有。
是的。
很简单:只有在检查了输出是否太长后才开始打印。