在 Linux tty 中不解釋回顯的轉義序列
先決條件
Linux 虛擬終端 (tty) 是VT102的仿真-虛擬終端子系統源。
真正的VT100(幾乎與VT102相同)具有以下行為(我想):
- 在LINE模式下,所有鍵入的字元首先傳輸到電腦,然後返回到終端。在從主機返回之前,終端螢幕上沒有任何顯示。
- 轉義序列也不例外——它們只有在從主機返回後才會被解析和執行。也就是說,如果我想將字型顏色更改為紅色,我應該輸入
ESC[0;31m
,這個序列進入電腦,回顯,VT102接收這個,解析並應用。沒有其他方法可以更改終端字型顏色(在LINE模式下)。我不確定VT102是否有不同的字型顏色,但這是一個例子。圖片來自手冊:
手冊摘錄:
線路/本地
LINE/LOCAL 功能允許操作員輕鬆地將終端置於 ON-LINE 或 LOCAL(離線)狀態。當終端線上時(ON-LINE 指示燈點亮),所有在鍵盤上鍵入的字元都直接發送到電腦,並且來自電腦的消息顯示在螢幕上。在 LOCAL 狀態下(LOCAL 指示燈亮),端子與電腦電氣斷開;資訊不會發送到電腦或從電腦接收;並且在鍵盤上鍵入的字元直接在螢幕上回顯。
資料來源:VT100 系列影片終端技術手冊,第三版,1982 年 7 月。
問題
為什麼 Linux 的
tty
行為方式不同?我將其
bash
置於睡眠模式,所以它不會干擾,然後輸入Esc``[0;31m
並獲取純文字,顏色沒有改變 - 所以,轉義序列沒有效果。幾年前我被問過類似的問題 -為什麼我不能從鍵盤發送轉義序列,但可以從另一個 tty 發送?,但現在我了解了VT102 Linux 子系統的知識,並想了解它為什麼會這樣工作——在這方面與真正的硬體終端不同。
首先,這個問題是在Retrocomputing上提出的,但社區發現它更適合這個網站。但是我在評論部分得到了答案,所以在這裡複製它:
Linux 虛擬控制台以聯機模式模擬(某種)VT102 終端,連接到 Linux(串列)tty 設備。Linux tty 驅動程序通常不會回顯轉義控製字元,而是回顯**^[。如果您不希望 tty 驅動程序執行此操作,請使用stty -ctlecho**。真正的 VT102 終端也不支持顏色,它無論如何都可以與 Linux 虛擬控制台一起使用,因為它不是真正的 VT102 兼容。
我已經嘗試過
stty -ctlecho
它幾乎可以按預期工作 - 只有一個子問題 - 真正的VT102在人按下並開始輸入轉義序列後也沒有顯示字元ESC
,所以這個人是以盲目的方式輸入它嗎?