一些产生大量输出的 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
和其他所有内容。
答案1
shell 如何决定何时调用寻呼机?
事实并非如此。
每个单独的程序是否都有自己的代码来测量其输出并调用寻呼机?
是的。
当它意识到输出太长时,它不是已经将一些内容打印到标准输出而无法将其返回吗?
简单:只开始打印你的输出后你检查一下是否太长了。