对带有&;的'mysql-e'输出格式有点好奇;无重定向

对带有&;的'mysql-e'输出格式有点好奇;无重定向,mysql,command-line,stdout,Mysql,Command Line,Stdout,比如说,当我运行mysql-u user-p-e“select id from db.users limit 1”时,我得到: +------+ | id | +------+ | 8434 | +------+ id 8434 当我将输出/stdout重定向到某个文件时,比如mysql-u user-p-e'select id from db.users limit 1'>/tmp/a.txt,然后我cat/tmp/a.txt,我得到: +------+ | id | +-----

比如说,当我运行mysql-u user-p-e“select id from db.users limit 1”时,我得到:

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

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

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

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

    mysql -B -u user -p -e 'select id from db.users limit 1'
那你就会明白了

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

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

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

至于你的问题,mysql使用under the hood来知道你是否正在重定向输出。

-B
意味着使用tab作为列分隔符打印结果,因此它意味着mysql-e'blahblah'的输出由tab和新行分隔,而不是由“|”和“+”和“-”分隔。无论如何,我的问题是,为什么输出格式在有重定向和没有重定向的情况下是不同的。这是否意味着
mysql
知道何时将其输出重定向到其他地方?@DeanWinchester“这是否意味着mysql知道何时将其输出重定向到其他地方”->是的,mysql知道。我已经编辑了答案。你说得对:)
isatty
可以测试它,它只是关于文件描述符。如果存在重定向或管道,则文件描述符不再是1。我把你的答案编辑了一下,关于
-B
的一些东西incorrect@DeanWinchester谢谢你的建议!似乎你的建议被其他3个用户拒绝了,然后我更新了你的建议。