目次
- 目次
- はじめに
- 初期設定の方法
- bashのhistoryをインタラクティブに検索して、入力する
- rostopic listからpercolで選んで、rostopic echoする方法
- 参考資料
- MyEnigma Supporters
はじめに
Pythonにはpercolという、
標準出力のデータを、
簡単に選択してフィルタリングできるツールがあります。
このツールを使うと、
bashでの開発や、
ROSのCUIツールを便利にすることができたので、
いくつか紹介したいと思います。
初期設定の方法
まず初めに、percolをインストールします。
$ pip intall percol
続いて、
最新のLinux(自分の場合Ubuntu14.04)のbashでは不必要なのですが、
自分のMacの場合(OS X El Capitan 10.11.3)、
bashのバージョンが低くく、
percolの良い部分が使えなかったので、
下記の方法でMacのbashをアップデートしましょう。
(参考: Mac で homebrew の bash をログインシェルにする - Qiita)
まず、Homebrewで最新のbashをインストールします。
$ brew install bash
そして、シェルの設定をインストールしたbashに変更します。
$ echo '/usr/local/bin/bash' | sudo tee -a /etc/shells
$ chsh -s /usr/local/bin/bash
以上です、bashで
$ bash --version
と入力して、bashのバージョンが4.x.x以上になっていればOKです。
bashのhistoryをインタラクティブに検索して、入力する
下記の記事のように、
通常のbashでもCtrl+rで履歴を検索出来ますが、
すこぶる使いづらいので、
percolを使って、使いやすくします。
下記のコードをbashrcに貼り付けます。
#========history search======= # 重複履歴を無視 export HISTCONTROL=ignoreboth:erasedups #historyの保存の数を10000に export HISTSIZE=10000 # settings for peco _replace_by_history() { declare l=$(HISTTIMEFORMAT= history | sort -k1,1nr | perl -ne 'BEGIN { my @lines = (); } s/^\s*\d+\s*//; $in=$_; if (!(grep {$in eq $_} @lines)) { push(@lines, $in); print $in; }' | percol --query "$READLINE_LINE") READLINE_LINE="$l" READLINE_POINT=${#l} } bind -x '"\C-r": _replace_by_history'
すると、Ctrl+rをおした時に、
冒頭のスクリーンショットのように
自動でbashの履歴を元にpercolが開き、
あとは、一部のコマンドをタイプすれば、
リアルタイムで絞込検索してくれます。
あとは最終的なコマンドを選んで、
Enterを押せば、そのコマンドがbashに入力された状態になります。
非常に便利です。
rostopic listからpercolで選んで、rostopic echoする方法
ROSを使っていると、rostopic echoは必須ですが、
いつもrostopic listして、
目的のtopic名を確認してから、
そのtopic名をrostopic echoの後ろに入力して、
トピックを確認していました。
しかし、それらの手順が面倒だったので、
percolで選んだトピックを、
即座にrostopic echoできるようにしました。
下記のコードをbashrcに追記し、
function _rostopicecho() { declare topic=$(rostopic list | percol --query "$READLINE_LINE") cmd='rostopic echo '$topic READLINE_LINE="$cmd" READLINE_POINT=${#cmd} } #bind しないと選んだ文字列が挿入されない bind -x '"\C-e": _rostopicecho'
Ctrl-eを押すと、
冒頭のスクリーンショットのように
percolで現在のトピックリストが表示されるので、
表示したいトピックを選んで、Enterを押すと、
$ rostopic echo topicname
と入力された状態でbashに戻るので、
あとはEnterを押すだけで、
そのトピックをrostopic echoで見ることができます。
頻繁に使う機能なので、便利ですね。
下記の記事でも、zshで同様のことを実施しているので
参考になると思います。
参考資料
MyEnigma Supporters
もしこの記事が参考になり、
ブログをサポートしたいと思われた方は、
こちらからよろしくお願いします。