為什麼提示顯示在終端的頂部,而不是底部?
我為什麼要問這個?
你可以猜到,這主要是出於好奇。但是,為什麼我的腦海裡會湧現出好奇心呢?
好吧,有一段時間我注意到我很不高興,在我跑去
clear
清理終端螢幕之後,我不得不把眼睛從螢幕底部移開,在連續命令和它們的命令之後提示結束了輸出,到螢幕的頂部。那是我將其插入我的
~/.bashrc
:__prompt_to_bottom_line() { tput cup $LINES } alias clear='clear && __prompt_to_bottom_line'
對我來說,執行後提示在底部
clear
意味著提示總是在底部,從不在頂部。其他一切都和平常一樣。其他人呢?
我想我不是唯一一個感到這種必要性的人。以這個問題為例:使用者希望提示始終位於頂部,輸出位於其下方,但順序相反(但一個命令的一個輸出,即使是多行,也不會顛倒,很明顯)。
如果您考慮一下,該使用者希望在螢幕上看到
tac
的正是我所期望的(除了多行輸出沒有反轉)。所以我的問題是
為什麼終端設計有這種不統一的行為?我所說的非統一是指它從一種情況開始,除非一個 s,否則它永遠不會重複
clear
,這將在命令後更改命令,提示在螢幕下方移動,最終提示最終處於“穩定”位置螢幕底部,它不會再從那裡移動,除非一個clear
s.輸出向下/向上推總是在頂部/底部的線不是更適合眼睛的設計嗎?
我指的是終端模擬器以及虛擬控制台。因為在他們兩個中我都使用
bash
了,但我可以使用另一個 shell,我認為是的,我在詢問 shell 的行為。終端仿真器行為的歷史應該包含在為什麼輸入游標在終端仿真器中總是從頂部到底部?那裡的答案,包括我的,都缺少對 Lear Siegler ADM 終端的歷史概述,因為大部分行為都與它們的演變有關。早期終端只支持“底線輸入”——游標固定在底線;“下線滾動”,這是我們今天熟悉的行為,是 ADM-3A 引入的一個選項。
shell 行為的這一方面的歷史是沒有真正的:
sh
-style shell 不知道終端或其功能。在它的核心,你的 shell 只關心它的輸入是否來自以及它的輸出是否會發送到一個偽裝成終端的設備(由函式isatty
確定);它不知道它是電傳打字機、玻璃終端、終端仿真器,還是其他與終端兼容的設備,無論是虛擬的還是其他的。¹¹ “在其核心”是因為目前
sh
樣式的 shell 的一些特性,例如select
在 Bash 中,知道終端具有給定數量的列和行。