理想未来ってなんやねん

娘可愛い。お父さん頑張る。

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
Mac OS X

MacならMacPortsから

$ sudo port install bash-completion
||<<
でインストールできます。


その後、bash_completionをロードするように下記のように.bashrcに記述します。

>|bash|
if [ -f /opt/local/etc/bash_completion ]; then
    . /opt/local/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 

といった感じにコマンドが補完される。
svncvsなども同じ。