20

如果我这样做:

$ cat /bin/ls

进入我的终端,我明白为什么我看到一堆二进制数据,代表 ls 可执行文件。但之后,当我得到提示时,我自己的击键看起来很疯狂。我输入“a”,我得到一条奇怪的对角线。我输入“b”,我得到一个学位符号。

为什么会这样?

4

6 回答 6

44

因为在您的二进制数据中的某处是一些控制序列,您的终端将这些控制序列解释为请求,例如,更改用于绘制的字符集。您可以像这样将一切恢复正常:

reset
于 2008-09-23T14:22:36.387 回答
13

只需复制粘贴:

echo -e '\017'

到您的 bash 和字符将恢复正常。如果您不运行 bash,请尝试以下击键:

<Ctrl-V><Ctrl-O><Enter>

并希望当您的终端抱怨找不到要运行的 <Ctrl-V><Ctrl-O> 或 <Ctrl-O> 命令时,它的状态将恢复正常。

<Ctrl-N> 或字符 14(发送到终端时)命令切换到特殊图形模式,其中字母和数字被替换为符号。<Ctrl-O>,或字符 15,将一切恢复正常。

于 2008-12-16T01:03:10.653 回答
4

终端将尝试将抛出的二进制数据解释为控制代码,并在此过程中自行混淆,因此您需要清理您的 tty。

跑:

stty sane

事情应该会恢复正常。即使命令在您键入时看起来是乱码,实际字符也被正确存储,并且当您按下回车时,该命令将被调用。

您可以在此处找到有关 stty 命令的更多信息。

于 2008-09-23T14:59:39.183 回答
3

您将一些控制字符通过管道传输到 shell 中,这些字符告诉 shell 改变其行为并以不同的方式打印内容。

于 2008-09-23T14:22:28.587 回答
2

VT100几乎是用于终端窗口的标准命令集,但有很多扩展。使用的一些控制字符集、键盘映射等。

当您向这样的终端发送大量二进制字符时,很多设置都会发生变化。一些终端具有将设置“清除”回默认值的选项,但通常它们根本不是为二进制数据而设计的。

VT100 及其后续产品允许 Linux 在简单的终端程序中打印彩色文本(例如彩色 ls 列表)。

-亚当

于 2008-09-23T14:25:54.880 回答
-1

如果你真的必须将二进制数据转储到你的终端,如果你将它通过管道传送到一个类似的寻呼机,你会有更好的运气less,它会以一种更易读的格式显示它。(您可能还对strings和感兴趣,od如果您正在摆弄二进制文件,两者都会很有用。)

于 2008-09-23T14:33:06.453 回答