代码之家  ›  专栏  ›  技术社区  ›  Alana Storm

为什么将二进制文本传送到屏幕上常常会破坏终端?

  •  5
  • Alana Storm  · 技术社区  · 15 年前

    假想情况: 您已经使用mysqldump创建了一个mysql数据库的备份。此数据库有属于Blob的列。这意味着您的转储文件包含字符串和二进制数据(二进制数据存储为字符串?)

    如果你把这个文件放到屏幕上

    $ cat dump.mysql
    

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

    为什么会这样?换言之,我认为我在寻找一个概述,当你将二进制字符串存储到一个文件中,当你对这些文件进行cat处理时,当cat的结果被报告给终端时,以及任何其它我遗漏的步骤时,实际发生了什么。

    3 回复  |  直到 15 年前
        1
  •  5
  •   Daniel Martin    15 年前

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

    尤其是第3节(控制台概述)和第4节(重新设置终端)。

    它涵盖的内容比你所说的要多一些,但应该给你所需要的。

        2
  •  6
  •   Byron Whitlock    15 年前

    当您cat一个二进制文件时,您可以不经意地 send control characters 到终点站。

    例如,如果终端应用程序想发送一个蜂鸣音,它会向终端发送以下二进制文件:0x007(仅限SYS V)。

    颜色、光标位置和其他内容也是如此。

        3
  •  2
  •   amertune    15 年前

    当您将二进制数据分类到屏幕上时,终端会尝试将该二进制数据解释为ASCII(或UTF)。有些字符能够控制终端。例如,

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

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