答案1
是什麼產生了此訊息
這不是由 Bourne Again shell 產生的。這不是蒂爾達製作的。
這是由ps
以下命令產生的procps 工具集表演這個檢查它的set_screen_size()
功能。該ps
指令要求您的終端設備至少為 9 列 x 2 行,以便能夠合理地顯示內容。在某個地方,您可能不知道,您正在調用ps
.
該ps
命令直接從附加到其標準 I/O 檔案描述符的終端設備(的線路規則)獲取終端大小,並且如果它們的值是正確的數字,則允許被環境變數COLUMNS
覆蓋。LINES
您可以ps
透過執行以下命令來查看命令所看到的內容,以便做出決定:
stty 大小; printenv 列 行您可以透過執行以下命令來嘗試拉動
ps
腿部:列=65535 行=1 ps
如果您已將COLUMNS
和LINES
環境變數設為愚蠢的 131072×1 值(如 的輸出所示)printenv
,那麼就不要這樣做。 ☺ 然而,終端設備本身更有可能報告此大小,您可以從 的輸出中看到這一點stty
。 (請注意,Bourne Again shell 所做的全部工作checkwinsize
就是設定這些 shell 變數的值,如果不匯出,這些變數甚至不會傳遞到ps
其環境中的命令,無論終端設備報告大小如何。checkwinsize
紅色也是如此。鯡魚,如果環境變數是無意義的,終端設備本身正在報告廢話,後者才是要解決的根本問題。
這就是為什麼雖然它沒有產生蒂爾達可能有錯的消息。終端設備大小是一種共享資源,任何具有終端設備開啟檔案描述符的東西都可以透過ioctl()
系統呼叫任意更改。但它是按照慣例設置,在使用軟體的場景中終端仿真程式與 Tilda 一樣,當顯示模擬的 GUI 視窗的大小改變時,由終端模擬器程式執行。終端機模擬器程式取得 GUI 調整大小事件,將其轉換為列和行,並使用 設定設備大小ioctl()
。
這並不是說其他東西沒有為這種廢話設定大小。畢竟可以設定你自己只需執行以下命令即可達到任意無意義大小:
stty 列 1 行 65535
這讓我們想到…
如何重置終端設備大小
如果您發現終端設備報告的大小是無意義的:
- 如果您使用的是 GUI 終端仿真器,請按列/行左右調整 GUI 的大小。這應該會觸發
ioctl()
並將終端大小設為合理的值。 - 將大小設定為更合理的值(例如):
stty 列 80 行 25
- 使用
reset
命令。請注意,reset
除了終端設備大小之外,還設定了許多其他內容。 - 如果您的終端機模擬器與 DEC VT340/VT420 相容,請直接發出適當的 DECSCPP amd DECSLPP/DECSNLS 控制序列,或使用諾許工具集的
console-resize
(又名resizecons
) 命令來發出它們:調整大小 80x25