操作后提示出现字符是什么意思?

TRi*_*RiG 6 bash escape-characters

比较以下两个命令:

mysqldump database_name --hex-blob -uuser_name -p | tee database_name_tee.sql
mysqldump database_name --hex-blob -uuser_name -p > database_name_out.sql
Run Code Online (Sandbox Code Playgroud)

如果我运行第一个,完成后我会在终端上看到以下内容:

$ 62;c62;c62;c62;c
Run Code Online (Sandbox Code Playgroud)

这是从哪里来的?这是否表明过程中某处出了问题?这些控制字符是出于某种原因输出的吗?

U+0C62是泰卢固语元音符号 Vocalic L,我很确定这不是我的数据的一部分,所以我认为这不是 Unicode。无论如何,序列似乎不是c62但是62;c。这可能是某种控制字符。任何导致它的原因都包含在输出文件中。如果我稍后cat要么database_name_tee.sqldatabase_name_out.sql,一旦cat完成,我将再次看到此序列。

tail database.sql -n200不产生这个输出;-n300只产生$ 62;c62;c; 并-n400产生$ 62;c62;c62;c62;c. 因此,导致这种情况的原因分布在整个文件中。

head和乱搞tail,我发现了一个罪魁祸首:一行,当保存到一个单独的文件并用 打印时cat,会产生$ 62;c62;c. 我的问题是这一行是 1043108 字节。

(生成的 SQL 文件非常好,并且运行没有错误。我认为这与 MySQL 本身没有任何关系。)

我在mysqldumpCentOS 服务器上运行初始版本,并且cat在服务器本身和我的 Ubuntu 桌面上看到了相同的效果,所以这似乎是一个通用的 Bash 事情。

od -c problem_line产生65174 行 output,所以我把它剪成一个更小的部分来展示相同的输出(也可以作为一个普通的 hexdump)。

Tho*_*key 3

八进制转储中没有转义字符(那些是033)。

有一些 8 位控制代码(通常除 xterm 之外的大多数终端都没有实现)。八进制232是十六进制 0x9a,并且(参考XTerm Control Sequences):

ESC Z
     Return Terminal ID (DECID is 0x9a).  Obsolete form of CSI c  (DA).

...
CSI Ps c  Send Device Attributes (Primary DA).
            Ps = 0  or omitted -> request attributes from terminal.  The
          response depends on the decTerminalID resource setting.
...
            -> CSI ? 6 c  ("VT102")
Run Code Online (Sandbox Code Playgroud)

这些字符来自终端对DECID控制字符的响应。响应的详细信息取决于终端模拟器(问题中未提及)。