MySQLは出力先が標準出力かファイルかによって内容を変える

こちらのブログの受け売りになりますが、タイトルのとおりです。 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; } コンパイル&実行...

2014-10-31 (Fri) · masutaka