如何解决使用su - admin时nano屏幕文字乱码的问题

如何解决使用su - admin时nano屏幕文字乱码的问题

在终端 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 rowsstty columns)。在许多情况下,不需要resizeeval...部分就足够了,但某些程序可能也需要环境变量。

答案3

在 OS X 上使用login是解决此问题的方法。


$login
登录名:your username
密码:your password
上次登录: 日 月 日 HH:MM:SS on ttys000
$whoami
您的用户名

感谢用户格格苹果堆栈交换

相关内容