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