SE上有许多问题,显示了如何从损坏的终端中恢复cat /dev/urandom
。对于那些不熟悉此问题的人-这里的内容是:
- 您执行
cat /dev/urandom
或等效操作(例如cat binary_file.dat
)。 - 打印垃圾。
没关系...除非您的终端即使在命令完成后仍继续打印垃圾!这是实际上是g ++输出的文本错误呈现的屏幕截图:
我猜人们对C ++错误有时过于神秘是正确的!
通常的解决方案是运行stty sane && reset
,尽管每次发生时都运行它很烦人。
因此,我要重点关注的是发生这种情况的原始原因,以及在发出此命令后如何防止终端损坏。我不是在寻找诸如将有问题的命令传递到tr
或的解决方案xxd
,因为这要求您在实际运行/打印之前知道程序/文件输出二进制文件,并且每次输出此类数据时都需要记住该文件/二进制文件。
我注意到URxvt,PuTTY和Linux帧缓冲区中的行为相同,所以我认为这不是终端特定的问题。我的主要怀疑是随机输出包含一些ANSI转义代码,该代码会翻转字符编码(实际上,如果cat /dev/urandom
再次运行,很有可能它将破坏终端,这似乎证实了这一理论)。如果正确,那么此转义码是什么?有禁用它的标准方法吗?