
在終端機 I 中su - admin
,在我的使用者帳戶中進行brew update
、修改.bashrc
等。
我注意到,在我的使用者會話中,在運行時更改視窗的大小nano
根本不會擾亂文字。視窗大小完美調整。
然而,在打開新的終端視窗後,運行su - admin
,然後nano
嘗試調整大小 - 文字被打亂並且無法恢復。control-l
不起作用。
當我登入管理員帳戶打開終端機並運行時,nano
調整視窗大小沒有問題 - 文字不會打亂。
同樣的問題反過來也會發生。從我的管理員帳戶使用su - user
、運行nano
和調整大小將導致文字混亂。
知道這裡發生了什麼以及如何解決這個問題嗎?
我用的是nano 4.9
答案1
我知道這個問題有一個選定的答案,但如果您閱讀手冊,需要的是螢幕刷新,使用:
^L
這是
ctrl + L
如果由於某種原因緩衝區被損壞,您需要點擊它幾次。
答案2
終端模擬器將向與終端模擬器一起啟動的 shell 發送視窗更改訊號 (SIGWINCH)。 shell 應該將其傳遞給其子級 - 但是當您轉換到另一個使用者帳戶(使用su
或以其他方式)時,它將無法向該 shell 發出訊號,因為它以不同的使用者身分執行。因此su
'd shell 和從它運行的任何程式將繼續使用舊的視窗大小,而忽略了實際視窗大小已更改的事實。
要完全更新會話su
以使用新的視窗大小,您需要eval $(resize)
在該 shell 中運行。它將更新環境變數 COLUMNS 和 LINES (這就是eval
需要的原因)以及終端設定(相當於命令stty rows
和stty columns
)。在許多情況下,不需要resize
該eval...
部分就足夠了,但某些程式可能也需要環境變數。