在将一堆二进制数据转储到终端后,为什么击键会变成疯狂的字符?
如果我做类似的事情:
$ cat /bin/ls
进入我的终端后,我了解了为什么我看到一堆二进制数据,它们代表ls可执行文件。但是之后,当我收到提示时,我自己的按键看起来很疯狂。我输入" a",我得到一条奇怪的对角线。我输入" b",我得到一个学位符号。
为什么会这样?
解决方案
我们将获得一些控制字符,这些控制字符被传递到外壳中,这些控制字符告诉外壳更改其行为并以不同的方式打印内容。
因为在二进制数据中某处有一些控制序列,终端将这些控制序列解释为请求,例如,更改用于绘制的字符集。我们可以将所有内容恢复为正常状态,如下所示:
reset
VT100几乎是用于终端窗口的标准命令集,但是有很多扩展。使用了一些控制字符集,键盘映射等。
当我们向这样的终端发送很多二进制字符时,很多设置都会改变。某些终端具有将设置"清除"回默认值的选项,但总的来说,它们根本不是针对二进制数据的。
VT100及其后续产品使Linux可以在一个简单的终端程序中以彩色文本(例如彩色的ls列表)进行打印。
-亚当
如果确实必须将二进制数据转储到终端,那么如果将其通过管道传递给less
这样的寻呼机,则运气会更好,后者将以更具可读性的格式显示它。 (我们可能还对strings
和od
感兴趣,如果我们不熟悉二进制文件,它们都可能有用。
终端将尝试将抛出的二进制数据解释为控制代码,并在处理过程中弄乱自己,因此我们需要清理tty。
跑:
stty sane
而且情况应该恢复正常。即使在键入命令时看起来乱码,实际字符也已正确存储,并且当我们按回车键时,将调用该命令。
我们可以在此处找到有关stty命令的更多信息。
只需复制粘贴即可:
echo -e '7'
到重击,字符将恢复正常。如果我们不运行bash,请尝试以下击键:
<Ctrl-V><Ctrl-O><Enter>
并希望当我们抱怨找不到运行的<Ctrl-V> <Ctrl-O>或者<Ctrl-O>命令时,终端的状态将恢复正常。
将<Ctrl-N>或者字符14发送到终端时,命令切换到特殊的图形模式,在该模式下字母和数字被符号替换。 <Ctrl-O>或者字符15,可以使情况恢复正常。