为什么管道二进制文本到屏幕经常Horck一个终端

时间:2010-04-12 18:54:24

标签: mysql unix shell blob cat

虚构情况:您已经使用mysqldump创建了一个mysql数据库的备份。此数据库具有blob列。这意味着你的“文本”转储文件包含字符串和二进制数据(二进制数据存储为字符串?)

如果您将此文件录制到屏幕

$ cat dump.mysql

你经常会得到意想不到的结果。终端将开始发出哔哔声,然后输出完成滚动,你通常会在终端上输入垃圾字符,就像你输入它们一样,有时你的提示和你输入的任何内容都是垃圾字符。

为什么会这样?换句话说,我想我正在寻找将二进制字符串存储到文件中时,以及当您捕获这些文件时,以及将cat的结果报告给终端时的实际情况以及任何其他步骤的概述我失踪了。

3 个答案:

答案 0 :(得分:6)

当您捕获二进制文件时,您可能会无意中send control characters到终端。

如果终端应用程序想要发送蜂鸣声,它会将以下二进制文件发送到终端:0x007(仅限SYS V)。

颜色,光标位置等也一样。

答案 1 :(得分:5)

从这里开始:http://www.faqs.org/docs/Linux-HOWTO/Keyboard-and-Console-HOWTO.html

特别是第3节(控制台常规)和第4节(重置终端)。

它比你所说的更多,但应该给你你需要的东西。

答案 2 :(得分:2)

当您将二进制数据捕捉到屏幕时,终端会尝试将该二进制数据解释为ASCII(或UTF)。一些角色能够控制终端。例如,

echo "^[[0;31;40m" # The first ^[ comes from pressing Ctrl+v, Esc

将背景变为黑色,前景变为红色。使用reset将您的终端恢复正常。