Pager
shell 如何決定何時呼叫尋呼機?
一些產生大輸出的 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
和其他所有內容。
shell 如何決定何時呼叫尋呼機?
它沒有。
每個單獨的程序是否都有自己的程式碼來測量其輸出並呼叫尋呼機?
是的。
當它意識到輸出太長時,它不會已經將一些列印到標準輸出而無法取回嗎?
很簡單:只有在檢查了輸出是否太長後才開始列印。