sshでリモートホスト名を補完できる、bash_completion
Linux/Unix等を利用していて、コマンドやファイル名、ディレクトリ名はTABキーで補完をかけることはよくあると思います。
今回は、bashの補完機能を強化する、bash_completionを紹介したいと思います。
bash_completionをインストールする
Debian系のディストリビューションであれば標準でインストールされているとおもいます。/etc/の下に入っていますので、確認してみましょう。
$ ls -l /etc/bash_completion -rw-r--r-- 1 root root 215907 2006-12-12 06:20 /etc/bash_completion
もしインストールされていない場合は、下記のサイトからダウンロードしてください。
bash programmable completion – Freecode
/etc/の下に置くような手順にします。
$ wget http://freshmeat.net/redir/bashcompletion/20101/url_tgz/bash-completion-20060301.tar.gz $ tar xvfz bash-completion-20060301.tar.gz $ sudo cp -i ./bash_completion/bash_completion /etc/
.bashrcへの設定の追加
さて、インストールが完了したらbash_completionを使うように、.bashrcに設定を追加しましょう。
$ vi ~/.bashrc [下記の設定を追記する] if [ -f /etc/bash_completion ]; then . /etc/bash_completion fi $ source .bashrc -> エラーが出ないことを確認する
これでbash_completionの設定は完了です!
ssh_configの設定を変更する
sshでいままでログインしたことのあるホスト名を補完できるのですが、その際、~/.ssh/known_hostsを参照しています。
ただし、/etc/ssh/ssh_configでhash化されるように指定されている場合は有効にならないので、設定を変更します。
$ vi /etc/ssh/ssh_config [変更前] HashKnownHosts yes [変更後] HashKnownHosts no
これで今後sshでログインしたホスト名はすべて補完をすることができます。
bash_completionを試す
それでは早速ためしてみましょう。
$ ssh (ここでTABキーを押す) 192.168.11.10 192.168.11.11 debian centos
すると、上記のように候補となるようなホスト名の候補リストが表示されます。あとはだんだんと指定していけば使用できます。
またコマンドの引数も補完をすることができます。
$ svn (ここでTABキーを押す) ? blame cleanup cp diff import log move pe pl propedit ps rename st switch add cat co del export info ls mv pedit plist propget pset resolved stat unlock ann checkout commit delete h list merge pd pg praise proplist remove revert status up annotate ci copy di help lock mkdir pdel pget propdel propset ren rm sw update
ここでは試しにsvnコマンドを使用しています。(ちょっとコマンド数が多いですね・・・)
このように、様々な補完をすることができるようになります。