程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MYSQL入門知識 >> mysql 輸出重定向時為什麼邊框會消失

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 <unistd.h>

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 <SQL
COUNT(*)
93
[root@www cron]#

 

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved