Command-Line

在 Mac 上進行重置,就像在 Linux 上進行重置一樣

  • December 23, 2017

在 Mac 上,reset終端中的命令幾乎與clear. 在 Ubuntu Linux 以及其他版本的 Linux 上,該reset命令實際上會“重置”終端,這樣您就無法向上滾動或通過滾動查看先前輸入的命令。有沒有辦法讓resetMac 上的命令像 Linux 上的一樣行動/做同樣的事情reset?如果是這樣,我該怎麼做?

實際上(在 MacOS 上),它不是“完全相同的東西”(“clear”的手冊頁描述與“reset”不同)。

MacOS 附帶 ncurses 5.7(9歲),對終端數據庫進行了一些更新。如果您想要更新的東西,安裝 MacPorts 可以讓您將 ncurses 更新到目前(少於幾個月)版本。

順便說一句,這將比 Ubuntu 更新,後者通常比開發版本滯後 6 個月到 2 年或更長時間。

這有點像歷史文物。在 Unix 誕生之初time_t,電腦是數據中心的大盒子,終端是用於與它們通信的獨立硬體。終端不一定來自與電腦相同的製造商,每個終端製造商和型號都有自己的一組額外功能和怪癖,必須加以考慮。

curses, 及其後來的繼任者ncurses是隱藏所有終端的製造和模型相關細節的庫,並提供執行終端控制操作的標準方法,如“清除螢幕”或“將終端重置為正常的預設設置”。這些庫使用環境變數TERM來決定應該使用哪一組控制序列。

命令喜歡clearreset使用此類庫將使用者請求的操作轉換為特定於終端模型的控制序列並將它們發送到終端。這些特定於模型的控制序列儲存在termcap文件中terminfo-termcap是舊樣式,terminfoncurses.

今天,“終端”實際上是一個終端仿真器,它執行在與實際電腦相同的物理硬體上,這一點非常普遍。但它仍然受到控制,就好像它是一個單獨的硬體一樣。

這讓終端仿真器的程序員有一定的自由度來選擇應該如何實現特定的功能。例如,程序員可能會這樣做,以便重置終端將清除回滾緩衝區 - 或者她/他可能會選擇其他方式,如果她/他認為回滾緩衝區“屬於”使用者並且沒有應用程序應該有權清除它。

或者,終端仿真器的程序員可能已經提供了不同的控制序列來重置終端,無論是否清除回滾緩衝區。在這種情況下,為 OS 分發打包終端控制庫的人將有一個選擇:該reset命令是否應該預設清除回滾?根據選擇,她/他可以在終端控制庫使用的數據文件中的適當位置儲存不同的控制序列。

系統管理員始終可以將新的終端控制序列集添加到termcapterminfo文件,或修改現有的。也許某些站點的終端模型並不廣為人知,或者標准定義可能只需要稍作調整即可匹配特定案例。如果事實證明該reset命令使用的預設控制序列實際上是“重置終端而不清除回滾”,您可以將其替換為文件中的“重置終端和回滾”程式碼。

引用自:https://unix.stackexchange.com/questions/412613