mysql输出重定向_mysql 输出重定向时为什么边框会消失

mysql 输出重定向时为什么边框会消失

今天,遇到了特神奇的一件事:

[root@www cron]# /home/mysql/bin/mysql -uroot -p123456 -e "select count(*) from test.email where 1"

+----------+

| COUNT(*) |

+----------+

| 93 |

+----------+

[root@www cron]#

[root@www cron]# /home/mysql/bin/mysql -uroot -p123456 -e "select count(*) from test.email where 1" | more

COUNT(*)

93

[root@www cron]#

就是多了一个管道+more, mysql输出中的边框怎么不见了…与加了–silent选项的效果是相同的。

[root@www cron]#

[root@www cron]# /home/mysql/bin/mysql --silent -uroot -p123456 -e "select count(*) from test.email where 1"

COUNT(*)

93

[root@www cron]#

翻源代码,终于找到了原因:

[root@H209 client]# pwd

/mysql-5.6.2-labs-innodb-memcached/client

[root@H209 client]# vi mysql.cc

1105 int main(int argc,char *argv[])

1106 {

1107 char buff[80];

1108

1109 MY_INIT(argv[0]);

1110 DBUG_ENTER("main");

1111 DBUG_PROCESS(argv[0]);

1112

1113 delimiter_str= delimiter;

1114 default_prompt = my_strdup(getenv("MYSQL_PS1") ?

1115 getenv("MYSQL_PS1") :

1116 "mysql> ",MYF(MY_WME));

1117 current_prompt = my_strdup(default_prompt,MYF(MY_WME));

1118 prompt_counter=0;

1119

1120 outfile[0]=0; // no (default) outfile

1121 strmov(pager, "stdout"); // the default, if --pager wasn't given

1122 {

1123 char *tmp=getenv("PAGER");

1124 if (tmp && strlen(tmp))

1125 {

1126 default_pager_set= 1;

1127 strmov(default_pager, tmp);

1128 }

1129 }

1130 if (!isatty(0) || !isatty(1))

1131 {

1132 status.batch=1; opt_silent=1;

1133 ignore_errors=0;

1134 }

注意1130行的isatty(0)和isatty(1)。

[root@H209 client]# man isatty

ISATTY(3) Linux Programmer’s Manual ISATTY(3)

NAME

isatty - does this descriptor refer TO a terminal

SYNOPSIS

#include

INT isatty(INT DESC);

DESCRIPTION

RETURNS 1 IF DESC IS an OPEN descriptor connected TO a terminal AND 0 ELSE.

1130 if (!isatty(0) || !isatty(1))

1131 {

1132 status.batch=1; opt_silent=1;

1133 ignore_errors=0;

1134 }

如果 stdin没有连接到terminal,或者stdout没有连接到terminal,就设置 opt_silent为1,于是就相当于附加了–silent选项。

除了管道之外, 标准输出输入重定向也会产生这种效果。

[root@www cron]# /home/mysql/bin/mysql -uroot -p123456 -e "select count(*) from test.email where 1"

+----------+

| COUNT(*) |

+----------+

| 93 |

+----------+

[root@www cron]# /home/mysql/bin/mysql -uroot -p123456 -e "select count(*) from test.email where 1" >a

[root@www cron]# cat a

COUNT(*)

93

[root@www cron]# cat SQL

SELECT COUNT(*) FROM test.email WHERE 1

[root@www cron]# /home/mysql/bin/mysql -uroot -p123456

COUNT(*)

93

[root@www cron]#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值