为什么在将一堆二进制数据转储到终端后,我的击键变成了疯狂的字符?

时间:2008-09-23 14:20:13

标签: linux unix terminal ascii

如果我这样做:

$ cat /bin/ls

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

为什么会这样?

6 个答案:

答案 0 :(得分:44)

因为二进制数据中的某个位置是您的终端解释为请求的某些控制序列,例如,更改用于绘制的字符集。您可以将所有内容恢复到正常状态,如下所示:

reset

答案 1 :(得分:13)

只需复制粘贴:

echo -e '\017'

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

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

希望终端的状态在抱怨无法找到&lt; Ctrl-V&gt;&lt; Ctrl-O&gt;时终止状态将恢复正常。或者&lt; Ctrl-O&gt;命令运行。

&lt; Ctrl-N&gt;或字符14 - 当发送到您的终端时 - 命令切换到特殊图形模式,其中字母和数字被符号替换。 &lt; Ctrl-O&gt;或字符15,将内容恢复正常。

答案 2 :(得分:4)

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

执行命令

stty sane

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

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

答案 3 :(得分:3)

你正在通过管道输入一些控制字符来告诉shell改变其行为并以不同方式打印。

答案 4 :(得分:2)

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

当你向这样的终端发送大量二进制字符时,很多设置都会改变。有些终端可以选择将设置“清除”回默认值,但一般来说它们不是为二进制数据制作的。

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

- 亚当

答案 5 :(得分:-1)

如果你真的必须将二进制数据转储到你的终端,那么如果你将它传递给像less这样的寻呼机,你会有更好的运气,它会以稍微可读的格式显示它。 (你可能也对stringsod感兴趣,如果你正在摆弄二进制文件,两者都会很有用。)