所以我遇到了一个非常奇怪的终端问题,它既影响物理登录会话,也影响 SSH 会话。基本上,终端大小是一些列。打印内容时,它会正确使用这个数量的列并在需要时换行。但是,当我输入实际命令时,它会使用一些较少的列。可能是 90 或 100 列。此时它会换行到当前行(而不是下一行)。如果我开始使用换行的命令退格,那么当它到达它换行的地方时,整个命令行将变为空白行。当我按向上箭头键重复上一个命令时也会发生这种情况。
这到底发生了什么?我该如何阻止它?
似乎建立一个新的终端会话通常可以修复此问题,但似乎没有其他方法可以解决reset
。
答案1
我不知道它是如何工作的,但运行stty sane
通常可以帮我解决这类终端问题。
Shell 提示符
根据你问题的描述,我怀疑问题可能与你的提示有关。设置包含改变颜色等的 ANSI 转义序列的提示时必须小心。其中一些会导致 bash 认为提示占用的空间比实际占用的空间要多。请参阅此非常好的 Ask Ubuntu 答案。
您必须告诉 Bash,该字符序列不应计入提示的长度,您可以通过将其括在(转义的)方括号中来实现
\[ \]
。我还建议使用 tput,而不是硬编码终端转义序列。请参阅Bash常见问题 53和终端代码(ANSI/VT100)介绍了解更多信息。
答案2
在我看来,如果你已经这样做了reset
,那么你真的没有什么可以做的了。咬紧牙关,开始一个新的终端会话。
这基本上发生在我错误地将cat
二进制文件的内容传输到终端后。如果无法修复,那就无法修复了。