rr-*_*rr- 24 terminal escape-characters output
SE 上有很多问题显示了如何从被cat /dev/urandom
. 对于那些不熟悉这个问题的人 - 这里是关于:
cat /dev/urandom
或等效(例如,cat binary_file.dat
)。那没问题……除非您的终端在命令完成后继续打印垃圾!这是实际上是 g++ 输出的错误渲染文本的屏幕截图:
我想人们对 C++ 错误有时太神秘的看法是正确的!
通常的解决方案是 run stty sane && reset
,尽管每次发生这种情况时都运行它有点烦人。
正因为如此,我想在这个问题中关注的是发生这种情况的原始原因,以及在发出此类命令后如何防止终端中断。我不是在寻找解决方案,例如将有问题的命令通过管道传递给tr
or xxd
,因为这要求您在实际运行/打印之前知道程序/文件输出二进制文件,并且每次碰巧输出此类数据时都需要记住.
我注意到 URxvt、PuTTY 和 Linux 帧缓冲区中的相同行为,所以我认为这不是特定于终端的问题。我的主要怀疑是随机输出包含一些翻转字符编码的 ANSI 转义码(事实上,如果你cat /dev/urandom
再次运行,它可能会打开终端,这似乎证实了这个理论)。如果这是正确的,这个转义码是什么?是否有任何标准方法可以禁用它?
Tho*_*key 22
不:
对于常用实现的功能,请查看 VT100 样式的备用字符集,该字符集由^N
和^O
(启用/禁用)激活。这可能在一些终端使用UTF-8模式下被抑制,但在同一终端拥有捣毁你的屏幕(谈论GNU屏幕,Linux控制台,腻子这里)与他们的转义序列充分的机会就认识。
例如,一些其他转义序列依赖于终端对主机查询(转义序列)的响应。如果主机不希望它,结果是屏幕上的垃圾。
在其他情况下(例如在 Linux 控制台带有硬编码转义序列的网络设备中看到),其他终端将其视为错误编码,并且似乎冻结。
所以...你可以只专注于一个终端,删除任何看起来令人讨厌的东西(例如,有些人建议删除使用鼠标在编辑器中定位的功能),你可能会得到一些没有明显漏洞的东西。但这只是一个终端。