因此,当我cat /dev/input/mouse0
在 TTY 中移动鼠标一点,然后ctrl-z
停止cat
时,我的终端字符全都乱了。几乎每个字符都会被替换为 ASCII 字符集中的另一个字符。当我在 Python 3.2 中执行此操作时,也会发生同样的情况:
print('\033[1;12mTest.\033[1;m')
相同的症状不会出现在 GUI 中的 shell 上,只会出现在虚拟终端上。如果我注销,问题不会消失。我怀疑某个转义码(可能包含在 Python 代码中)正在将 ASCII 字节码重新映射到字符表示,但这只是猜测。发生了什么,我该如何撤消它?
答案1
我终于找到了我正在寻找的命令命令行功能。命令是reset
。我试过了,完美运行,不用注销,也不用重启系统。
答案2
当将二进制文件输出到终端时,例如cat /dev/input/mouse0
,您可以向其发送任何字符。这可能会混淆虚拟终端。
字符串ESC键 [引入了“VT100 控制序列”(与旧玻璃键盘兼容)。其他字符如^Q,^S,^N,^O根据与带有纸带阅读器/打孔器的 Model 35 电传打字机的兼容性来做一些魔术。
当我尝试消除终端混淆时,我会这样做:
输出是否冻结?类型^Q(ctrl-Q)(XON 字符,启动纸带阅读器)。
键入命令stty sane
。如果键入时没有回显任何字符,stty echo
将恢复回显。
阅读man stty
,您将了解如何保存一组终端设置,并在稍后恢复它们!
顺便说一句,停止程序使用crtl-C停止一个程序。Ctrl-Z只是中断程序,准备将其置于后台。有些程序会捕捉^C并在退出时进行一些必要的清理、文件保存等。如果你只是^Z并运行其他程序,这个清理工作就无法完成。