对带 & 不带重定向的 `mysql -e` 输出格式有点好奇

A bit curious about `mysql -e` output format with & without redirect

当我运行 mysql -u user -p -e 'select id from db.users limit 1' 时,我得到:

+------+
| id   |
+------+
| 8434 |
+------+

当我将 output/stdout 重定向到某个文件时,例如 mysql -u user -p -e 'select id from db.users limit 1' > /tmp/a.txt,然后我 cat /tmp/a.txt,我得到:

id
8434

那么那些小格式字符串去哪儿了?这是否意味着 mysql 知道它何时被重定向,所以它 returns 是一种不同的格式?我一直认为 redirect(>) 与前一个命令无关,它不必知道其输出是否重定向或重定向到何处。还是另一种解释?

您将通过添加 -B 选项获得相同的输出

    mysql -B -u user -p -e 'select id from db.users limit 1'

然后你会看到

 id       
 8434 

此外,mysql 命令测试 cout 是否为 tty,以切换输出格式。 正如您在 source code of mysql 命令中看到的那样。

要在重定向时获得相同的精美 table 格式,请将 -t 标志或 --table 添加到您的 mysql 命令。

+----+--------+
| id | name   |
+----+--------+
|  1 | Quincy |
+----+--------+

关于您的问题,mysql 在幕后使用 isatty 来了解您是否正在重定向输出。