こちらのブログの受け売りになりますが、タイトルのとおりです。

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
貴様!ファイル出力だな!

へぇ〜