无法理解这种奇怪的MySql客户端行为

时间:2009-08-30 07:21:13

标签: mysql client

我不确定/ usr / bin / mysql这里的艺术线条输出是怎么回事。

问题:我无法将艺术线条(用于创建表格列)重定向到文件中!

首先,我在终端上这样做。

[sd@host:~/tmp]
$ mysql -usd sd -e 'select * from loan;'
+---------+--------------+--------+
| loan_no | branch_name  | amount |
+---------+--------------+--------+
| L-11    | Round Hill   |    900 | 
| L-14    | Downtown     |   1500 | 
| L-15    | Perryridge   |   1500 | 
| L-16    | Perryridge   |   1300 | 
| L-17    | Downtown     |   1000 | 
| L-23    | Redwood      |   2000 | 
| L-93    | Mianus       |    500 | 
+---------+--------------+--------+

现在,我希望在捕获的上面打印出完整的祝福,所以我将stdout和stderr重定向到'out'文件,如下所示:

[sd@host:~/tmp]
$ mysql -usd sd -e 'select * from loan;' >out 2>&1

如下所示,线条艺术完全缺失!

[sd@host:~/tmp]
$ cat out
loan_no branch_name amount
L-11    Round Hill  900
L-14    Downtown    1500
L-15    Perryridge  1500
L-16    Perryridge  1300
L-17    Downtown    1000
L-23    Redwood 2000
L-93    Mianus  500

更多证明线条艺术真的不见了! (-T选项打印选项卡,如果有的话。)

[sd@host:~/tmp]
$ cat -T out
loan_no^Ibranch_name^Iamount
L-11^IRound Hill^I900
L-14^IDowntown^I1500
L-15^IPerryridge^I1500
L-16^IPerryridge^I1300
L-17^IDowntown^I1000
L-23^IRedwood^I2000
L-93^IMianus^I500

所以,我的问题是,mysql如何知道 - 终端或文本文件 - 是否正在吸引其输出它的后端' :-)?

2 个答案:

答案 0 :(得分:2)

程序可以确定输出流是终端还是终端 没有使用isatty (3) function

MySQL使用此信息更改其输出(请参阅man mysql,“ - t”选项也为非交互模式生成表输出)

答案 1 :(得分:2)

知道

情况类似于

$ ls
tom   dick   harry

$ ls > out
$ cat out
tom
dick
harry