为什么当我意外地在 .coverage 文件上运行“cat”后,我的 bash 提示符变成了乱码?

为什么当我意外地在 .coverage 文件上运行“cat”后,我的 bash 提示符变成了乱码?

我刚刚安装覆盖范围当我注意到我的仓库中有一个文件时,我运行了几次.coverage,根据file实用程序的说法,这是一个8086 relocatable (Microsoft)文件。然后我这样做了,因为我不知道它是什么,想知道里面有什么……

~/repos/personalsite(master 7↑)$ cat .coverage
...lots of output...
≤☃─☃┼±@≤⎽☃└:·/⎼e⎻⎺⎽/≤☃─☃┼±⎽☃└↓c⎺└/≤☃─☃┼±⎽☃└(└▒⎽├e⎼ 7↑)$ 

即使我按了几次 Enter 键,它仍然这样。不仅如此,当我在命令行中输入时,出现了我意想不到的字符,例如

$ ↓┘ ┼⎺├ ⎺┼┌≤ ├▒▒├┬▒≤ ☃⎽ ├▒e⎼e ┼⎺├

对我来说,唯一的解决方案就是关闭 (tmux) 窗口。我只是想知道 (a) 为什么会发生这种情况,以及 (b) 下次我碰巧这样做时是否有任何方法可以修复此问题?

答案1

对于问题 a):这取决于您拥有哪种类型的终端。只需执行 a 即可echo $TERM查看您拥有哪种类型的终端。xterm应该没问题。当通过串行控制台连接时,我经常遇到这个问题,并且唯一有效的终端类型是vt100(一种旧但兼容性很好的终端)。当切换$TERMvt100通过 SSH 时,我也遇到了同样的问题。

对于问题 b):执行命令reset应该可以解决问题。也许您看到的命令也是乱码,但它应该可以工作。

只是为了澄清:每次您尝试cat对二进制编码文件(而不是特别的.coverage文件)执行操作时都会发生这种情况。

答案2

打印时,文字字符^N可能会导致某些终端上出现这种行为。cat尝试读取二进制编码文件时打印该字符。

要重现此行为,您可以^N使用 中的文字字符输入将字符写入文件vi。打开vi,进入Ctrl-vCtrl-n插入模式,然后保存文件。如果您输入cat此文件,您的终端的编码将失效。

文字字符会反转此行为,可以通过输入 来^O写入。viCtrl-vCtrl-o

相关内容