こちらのブログの受け売りになりますが、タイトルのとおりです。
MySQL の結果を csv 形式で標準出力させたい - BOOLEANLABEL
# 標準出力への出力と
$ mysql -u root mysql -e 'select count(*) from user'
+----------+
| count(*) |
+----------+
| 6 |
+----------+
# ファイルへの出力は異なります。
$ mysql -u root mysql -e 'select count(*) from user' > /tmp/hoge && cat /tmp/hoge
count(*)
6
isatty(3)で判定しているそうです。
/* mysql-5.6.21/client/mysql.ccの1233行目 */
if (!isatty(0) || !isatty(1))
{
status.batch=1; opt_silent=1;
ignore_errors=0;
}
else
status.add_to_history=1;
実際に使ってみました。
/* test.c */
#include <stdio.h>
#include <unistd.h>
int
main(int argc, char **argv)
{
/* 標準出力のファイルディスクリプタは1固定 */
if(isatty(1)) {
printf("貴様!標準出力だな!\n");
}
else {
printf("貴様!ファイル出力だな!\n");
}
return 0;
}
コンパイル&実行
$ gcc test.c
$ ./a.out
貴様!標準出力だな!
$ ./a.out > /tmp/huga && cat /tmp/huga
貴様!ファイル出力だな!
へぇ〜