我刚刚ssh
进入我的服务器(Ubuntu 10.04.2),然后运行aptitude
(以交互模式)。一旦我按下一个键(我相信是其中一个字母g),它就会变成这样(不仅仅是 SSH 会话;在我终止会话后,这种行为仍然继续ssh
):
我可以重新连接并且一切都会正常,但是当我aptitude
再次运行时,同样的问题会出现(但奇怪的是,它被限制在内aptitude
)。
有人知道会发生什么吗?如果有帮助的话,我正在screen
使用byobu
配置文件运行,我$TERM
的是screen-bce
,我Terminal.app
在 10.6.7 上使用。
答案1
您可以使用该命令reset
恢复正常终端。
至于为什么会发生这种情况 - 不知何故,您的终端获取的是二进制数据而不是 ASCII。
答案2
我意识到这个帖子已经有一年了,但由于我自己在使用“cat”显示 Apple 的 Terminal.app 中可执行文件的内容后也遇到了这个问题,所以我认为这种情况也可能会影响未来的用户。
无论如何,据我所知,奇怪的字符出现在打印 ASCII“移出”字符(十进制 14,0x0E)之后。(好吧,“打印”这个词可能不合适,因为至少对于 Terminal.app 来说,这不是一个可打印的字符,但我希望您明白我的意思。)幸运的是,如果打印 ASCII“移入”字符(十进制 15,0x0F),终端就会恢复正常。
换句话说,如果有人编写了如下 C 程序...
#include <stdio.h>
int main() {
printf( "\x0F" );
return 0;
}
它应该会让一切恢复正常。在其他语言中或在 bash shell 中可能还有更简单的方法,但希望您能明白我的意思。
显然,这种奇怪的行为不是一个错误,而是一个晦涩难懂的功能(至少对我来说)。当我搜索信息时,我被引导到 ISO 2022,这似乎是终端所做事情的基础。以下是维基百科上有关 ISO/IEC 2022 的文章。
我希望这篇文章对大家有所帮助,因为这些奇怪人物背后的秘密已经解开了。
答案3
菜单项
终端 > Shell > 发送重置
将终端状态重置为默认值,包括字符集,以解决此特定问题。