MySQLコマンドに -e
オプションでSQLを渡すと、その結果が標準出力されますよね
% mysql -e 'SELECT * FROM life;'
+------------------------+
| カルマ |
+------------------------+
| リア充爆発しろ |
| 他人の不幸で飯がうまい |
+------------------------+
でも、これをパイプで受け取ると中身が変わるんです。
% mysql -e 'SELECT * FROM life;' | cat
カルマ
リア充爆発しろ
他人の不幸で飯がうまい
これどうやってんのかなと調べてみたら、標準出力がttyに結合してるかどうかを返す isatty
なる関数が存在することを知りました。MySQLはこれの値を見て書きだす値を変更しているらしい。
で、これをRubyで書くとこんな感じで区別できる。
isatty.rb
puts STDOUT.isatty
実行してみる
% ruby isatty.rb
true
% ruby isatty.rb | cat
false
なるほどー