设备cat或Python打印后混合了TTY字符

所以,当我在TTY中cat /dev/input/mouse0时,将鼠标移动一下,然后ctrl-z停止cat ,我的终端字符都搞砸了。 几乎每个字符都被替换为ASCII字符集中的另一个字符。 当我在Python 3.2中执行它时,会发生同样的情况:

 print('\033[1;12mTest.\033[1;m') 

GUI中的shell上不会出现相同的症状,仅在虚拟终端上出现。 如果我退出,问题不会消失。 我怀疑某个转义代码(可能包含在Python代码中)是将ASCII字节代码重新映射到字符表示,但这只是猜测。 发生了什么以及如何撤消它?

我终于找到了我在Command Line Fu上寻找的命令 。 该命令被reset 。 我尝试了它,它完美地工作,没有注销或重新启动系统。

将二进制文件输出到终端时,如cat /dev/input/mouse0 ,可以发送任何字符。 这可能会混淆虚拟终端。

字符串ESC [引入“VT100控制序列”(与旧玻璃键打孔兼容)。 其他字符如^ Q^ S^ N^ O基于与带有纸带读取器/打孔器的Model 35 Teletypes的兼容性来做神奇的事情。

当我试图解除对终端的迷惑时,我会:

输出冻结了吗? 键入^ Q (ctrl-Q)(XON字符,启动纸带读取器)。

输入命令stty sane 。 如果键入时没有回显字符,则stty echo将恢复回声。

阅读man stty ,您将看到如何保存一组终端设置,并在以后恢复它们!

顺便说一句,停止程序使用crtl-C来停止程序。 Ctrl-Z只是中断程序,准备将其放在后台。 一些程序捕获^ C并在出路时进行一些必要的清理,文件保存等。 如果您只是^ Z并运行其他东西,则此清理无法完成。