对带 & 不带重定向的 `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
来了解您是否正在重定向输出。
当我运行 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
来了解您是否正在重定向输出。