在终端 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...
部分就足够了,但某些程序可能也需要环境变量。