运行输出无法识别代码的程序后,整个shell将充满无法识别的代码。
我该如何纠正这个问题?
答案1
SI/SO VT100 控制字符
乱码可能是由于终端获取SI
字符(Shift In;ASCII 14;Control-N)。SI
是VT100 控制字符这会导致终端切换到备用字符集。许多实际终端(例如实际的硬件设备,或者只是操作系统的纯文本控制台)和终端程序都遵守此转义代码。
切换回正常字符集的直接方法是向终端发送 SO 字符(Shift Out;ASCII 15;Control-O)。
恢复
因为字符集被切换了,您可能必须“盲目”输入恢复命令(不依赖于看到您所输入的内容)。
通常该echo
命令会很有用。通常您可以输入
E C H O Space Control- V Control-O Enter / Return
让终端看到 Control-O(Control-V 告诉终端的输入端下一个字符要逐字传递,否则输入端将在获取 shell 之前“吃掉”该字符,因此在将其发送回终端的输出端之前)。
如果您可以假设一个具有内置命令的合理 shell printf
(或者没有内置 shell 并且有一个合理的外部printf
命令),您可以使用printf '\017'
它来向终端发送 Control-O。
答案2
您尝试过 unixreset
命令吗?
这通常是将二进制文件(程序或数据文件)转储到终端(cat some.mp3
或类似终端)的结果。通常输入reset
即可让终端恢复正常。如果这不起作用,下一步要尝试的是终端应用程序上的重置功能 - 在应用程序的菜单中查找它。(例如,PuTTYReset Terminal
在其系统菜单中有一个。)
很少情况下,这两种方法都不起作用,这时您只需关闭该终端或 shell 并启动另一个即可。