ujunのブログ

MySQLのCLIでコマンドヒストリをpeco検索・実行

pecoでシェルのコマンド履歴を検索・実行することが多いです。 書き捨てのワンライナーや滅多に叩かないコマンドなどでも、とりあえず一度でも実行していれば、 曖昧な記憶を頼りに再実行することができるからです。

これを、mysqlcliでも同様のことができないかと思いました。 管理系のコマンドが全く覚えられないのはもとより、書き捨ての簡単なクエリも後から再実行できたら楽かなと。。

少し調べてみても、似たような話題にヒットしなかったので、 取り急ぎ以下のような感じでやっています。

まず、以下の2つのスクリプトを用意します。

mysql_peco.sql

system /path/to/mysql_peco.sh
source /path/to/tmp.sql

mysql_peco.sh

#!/bin/zsh                                                                                                                                                                                                                    
                                                                                                                                                                                                                               
BUFFER=$(sed -e "s/\\040/ /g" $MYSQL_HISTFILE | sed -e 's/\\//g' | egrep ";$" | egrep -i "^select|^update|^insert|^show|^commit|^use|^pager|^desc" | awk '!a[$0]++' | peco) 
echo $BUFFER > /path/to/tmp.sql 

あとは、mysqlcliから上記mysql_peco.sqlをsourceするだけ。 動きとしては、履歴ファイルをpecoして一旦一時スクリプト(tmp.sql)に保存して、最後に一時スクリプトをsourceしているだけですが!

これで、記憶力が悪い自分でも、さくさくオペレーションできるようになったはず。。 egrepの部分は思いつくまま書いたのでカスタマイズしていこうと思います。

なお、以下のように.editrcにショートカットを定義しておくと、さらに楽。

.editrc

 mysql:bind -s "^R" "source /path/to/mysql_peco.sql;"