Bash Completionでbashの補完機能を強力にする
bashは標準でもTABキーを押すとファイル名の補完ができますが、Bash Completionを使用するとコマンドやssh等のホスト名も補完できるようになります。
インストール方法
Ubuntu/Debian
Debian系ディストリビューションであれば標準でインストールされています。
bash_completionをロードするように下記のように.bashrcに記述します。
if [ -f /etc/bash_completion ]; then . /etc/bash_completion fi
Fedora/RHEL/CentOS
RedHat系のディストリビューションではhttp://bash-completion.alioth.debian.org/からダウンロードしてインストールします。
$ wget http://bash-completion.alioth.debian.org/files/bash-completion-1.2.tar.gz -O bash-completion-1.2.tar.gz $ tar xvzf bash-completion-1.2.tar.gz $ cd bash-completion-1.2 $ ./configure --prefix='' $ make $ sudo make install
bash-completion-1.2の場合、/etc/bash_completion.d/serviceスクリプトに不具合があるので修正します。
修正箇所は下記の通り。
--- service 2010-10-23 11:47:38.000000000 +0900 +++ service_fix 2010-10-23 12:21:08.000000000 +0900 @@ -32,9 +32,10 @@ return 0 } && complete -F _service service -[ -d /etc/init.d/ ] && complete -F _service -o default \ - $(for i in /etc/init.d/*; do - complete -p ${i##*/} &>/dev/null || printf '%s\n' ${i##*/}; done) +[ -d /etc/init.d/ ] && ( + services=$(for i in /etc/init.d/*; do + complete -p ${i##*/} &>/dev/null || printf '%s\n' ${i##*/}; done) + [ -n "$services" ] && complete -F _service -o default $services;) # Local variables: # mode: shell-script
その後、bash_completionをロードするように下記のように.bashrcに記述します。
if [ -f /etc/bash_completion ]; then . /etc/bash_completion fi
使用方法
コマンドを入力してTABを押すだけ。
sshであれば、~/.ssh/known_hostsに記載のホストが一覧表示される。
$ ssh 172.16.1.20 172.16.1.21 172.16.1.22 172.16.1.23 172.16.1.24 172.16.1.25 $ ssh
gitであれば、
$ git add commit init request-pull am config instaweb reset annotate describe log revert apply diff merge rm archive difftool mergetool send-email bisect fetch mv shortlog blame filter-branch name-rev show branch format-patch notes show-branch bundle fsck pull stage checkout gc push stash cherry get-tar-commit-id rebase status cherry-pick grep relink submodule citool gui remote svn clean help repack tag clone imap-send replace whatchanged $ git