Hatena::ブログ(Diary)

てつじんにっき

2012-08-15

[][] MySQLCLIのプロンプトをカスタマイズするzshのfunctionを書いた

いままで、mysqlのプロンプトの変更は $HOME/.my.cnf で、

[mysql]
prompt="^[[01;31m\U[\d]-[\D]^[[0m\nmysql> "

みたいにしていましたが、

  • 接続元のサーバ情報が出せない。(出し方を知らないだけかも)
  • 本番と開発環境など、同一の設定ファイルで環境に応じてプロンプトを柔軟に変更できない。
  • 色をつけるにはエスケープシーケンスを直書きしないといけない。

といった点が、ちょっと不満でした。

なのでコマンドオプションパースして、環境変数$MYSQL_PS1を組み立ててから

mysqlコマンドを実行する、zshのfunctionを作ってみました。

https://github.com/tetsujin/zsh-function-mysql

ちょっとわかりにくいですが、下記の例では

  • 接続元のサーバ情報を表示、ホスト名によって色分け。
  • 接続先のMySQLサーバのユーザ名、ホスト名で色分け。

をしています。

https://raw.github.com/tetsujin/zsh-function-mysql/master/doc/img/sample1.png

https://raw.github.com/tetsujin/zsh-function-mysql/master/doc/img/sample2.png

インストール

zshが読み込める場所にfunctionを追加します。

この例ではホームディレクトリに追加します。

$ cd /path/to
$ git clone git://github.com/tetsujin/zsh-function-mysql.git
$ mkdir -p ~/.zsh.d/functions
$ ln -s /path/to/zsh-function-mysql/mysql ~/.zsh.d/functions

$HOME/.zshrcへ設定を追記

インストールしたfunctionと、色設定で使うcolorsをautoloadします。

typeset -U fpath
fpath=(
    $HOME/.zsh.d/*(/N)
    $fpath
)
autoload -U colors; colors
autoload -U $(echo ~/.zsh.d/functions/*(:t))

下記のように設定を追記します。

# MySQLの接続元ホストのユーザ名($USER)によって色分けします。(自分は使ってません)
typeset -A mysql_prompt_style_client_user
mysql_prompt_style_client_user=(
    # 'root'     $fg_bold[red]
    # '*'        $fg_bold[green]
)
# MySQLの接続元ホスト名($HOST)によって色分けします。
# - .local.を含むローカル環境は緑
# - .dev.を含む開発環境では黄色
# - その他は赤
# としています。
typeset -A mysql_prompt_style_client_host
mysql_prompt_style_client_host=(
    '*.local.*'     "$fg_bold[green]"
    '*.dev.*'       "$fg_bold[yellow]"
    '*'             "$fg_bold[red]"
)
# MySQLの接続先ホストのユーザ名(-uオプション)によって色分けします。
# - rootは赤
# - その他は青
# としています。
typeset -A mysql_prompt_style_server_user
mysql_prompt_style_server_user=(
    'root'          "$bg_bold[red]$fg_bold[yellow]"
    '*'             "$fg_bold[blue]"
)
# MySQLの接続先ホスト名(-hオプション)によって色分けします。
# - masterを含む場合は赤
# - slaveを含む場合は黄色
# - その他は青色
# としています。
typeset -A mysql_prompt_style_server_host
mysql_prompt_style_server_host=(
    '*master*'      "$bg_bold[red]$fg_bold[yellow]"  # Master Server
    '*slave*'       "$bg[yellow]$fg[black]" # Slvae Server
    '*'             "$fg_bold[blue]"
)

# プロンプトを組み立てます。
# [注意] functionの実行直前に変数を評価するのでシングルクォートで定義してください。
mysql_prompt='${style_client_host}${USER}@${HOST}${fg_bold[white]} -> '
mysql_prompt=$mysql_prompt'${style_server_user}\u${reset_color}${fg_bold[white]}@${style_server_host}\h${reset_color}${fg_bold[white]}:${fg[magenta]}\d ${fg_bold[white]}\v\n'
mysql_prompt=$mysql_prompt'${fg_bold[white]}${bg_level}mysql${reset_color}> '


iTerm2とTerminal.appで軽く動作確認しただけなので、正しく表示できない環境もあるかもです。

視覚的にわかりやすくすることで、少しでもオペレーションミスが減れば嬉しいですね。



参考

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/Tetsujin/20120815/1345033377