如何解决终端屏幕混乱的问题? (通常在调整大小之后)

如何解决终端屏幕混乱的问题? (通常在调整大小之后)

有时,终端屏幕很混乱,当我们用来man ls阅读手册页或按向上箭头转到历史记录中的上一个命令时,屏幕将显示不正确位置的字符。 (例如,将屏幕末端视为屏幕中间的某个位置)。

该命令reset已尝试,但不起作用。一种可行的方法是注销或关闭窗口,然后先调整窗口大小,然后执行ssh(或关闭该选项卡,调整窗口大小,然后打开一个新选项卡以获取新外壳)。

但这样一来,我们就会丢失之前所做的任何事情,比如启动虚拟机控制台等。那么如果我们不关闭shell,有没有办法解决这个问题呢?

(这种情况之前发生在 Fedora 内部,也发生ssh在 RHEL 5.4 盒子中的 Macbook 上)。

更新:我现在记得它是如何在 Fedora 中发生的:我打开一个终端,并创建一个 FreeVM 来使用虚拟机的控制台(一个 shell)。我认为它的大小为 80 x 25,然后过了一会儿,我将终端大小调整为大约 130 x 50,然后(虚拟机的)“内壳”开始表现得很奇怪)。

答案1

如果您使用的是 bash,请检查“checkwinsize”选项是否在您的会话中激活

shopt | grep checkwinsize

如果你没有得到

checkwinsize    on

然后激活它

shopt -s checkwinsize

Bash 文档对于“checkwinsize”属性的说明:

“如果设置,Bash 会在每个命令后检查窗口大小,并在必要时更新 LINES 和 COLUMNS 的值。”

如果您喜欢该设置,您可以checkwinsize在您的~/.bashrc.

  • 激活:shopt -s checkwinsize
  • 停用:shopt -u checkwinsize

答案2

你可以尝试Ctrl+ L。它根据程序清除和/或重绘终端屏幕。

答案3

我遇到了同样的问题,并且上述方法都不适合我,因为我相信我的 bash 永远不会收到信号SIGWINCH,这些信号被其父进程捕获。

我终于找到了解决办法。我添加到我的.bashrc

export PROMPT_COMMAND="resize &>/dev/null ; $PROMPT_COMMAND"

现在,每当我收到新的提示时,我的窗口就会重新调整。

谢谢英国猴子用于 PROMPT_COMMAND 改进。

答案4

将这些选项添加到 docker exec 似乎解决了我的问题

-e COLUMNS=$COLUMNS -e LINES=$LINES -e TERM=$TERM

相关内容