MySQL 5.6.12 から、mysqlコマンドラインクライアントが使うデフォルトのreadlineが、フツーの(?) readlineからMySQLにバンドルされているreadlineに変わっています。そのため、MYSQL_PS1(や--prompt)にecho -eの出力結果を食わせてやろうとすると
$ export MYSQL_PS1=$(echo -e "\e[1;33mmysql[\d]\e[0m\n> ") $ client/mysql -S /usr/mysql/5.6.22/data/mysql.sock Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.6.22-log Source distribution Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 1;33mmysql[(none)[0> 1;33mmysql[(none)[0> 1;33mmysql[(none)[0> ^DBye
こうなります。
や、MySQLにバンドルされているやつと、システムワイドでインストールされてるやつでどうreadlineの実装が違うのとか全く興味がないので本当にreadlineのせいかどうかと聞かれると若干困るんですが、システムワイドのreadlineを使うようにしてmakeするとちゃんとこれを解釈できるようになるのでたぶんMySQLにバンドルされているreadlineのせいです(長)
$ sudo yum install libedit-devel $ cmake -DWITH_EDITLINE=system . $ make mysql $ export MYSQL_PS1=$(echo -e "\e[1;33mmysql[\d]\e[0m\n> ") $ client/mysql -S /usr/mysql/5.6.22/data/mysql.sock Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 6 Server version: 5.6.22-log Source distribution Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql[(none)] >
なおゲスい話ではありますが、接続してるのがマスターかスレーブか、ユーザーはrootか否かとかで更に色を出しわけたりできるので、わたしはmysqlコマンドラインクライアントにパッチをするのも好きです :)
Have fun!!
質問にお答えいただきありがとうございます。
返信削除やっぱりmysqlクライアントの再ビルドしかないんですかね。。。
ちなみに、mysql5.6からは「独自のreadline」ではなく「editline」というライブラリがバンドルされているようです。
readlineはGPLライセンス、editlineはBSDライセンスという違いがあって、商用版のmysqlは元々editlineをバンドルしていたようです。
それが、mysql5.6になってeditlineをデフォルトでバンドルするようになったので、プロンプトの色分けができなくなったみたいです。
おや、そうだったんですね。
返信削除(かつては) cmd-line-utils/readline/readline.h と cmd-line-utils/libedit/readline/readline.h にあったので、勝手に両方ともreadlineだと思っていました。。