.ssh/configに記載されたホストをタブ補完する

.ssh/configに記載されたホストをタブ補完する

概要

ssh実行時に.ssh/configに記載されたホスト名を補完したいなぁとおもったのでやってみた。

同じことは他の方もやっていたので、それを参考にした。その結果ほとんどオリジナリティはない。

あくまで一例として。

参考

.ssh/config 設定内容(サンプル)

.ssh/config

HOST host001
        HOSTNAME 1.1.1.1
HOST host002
        HOSTNAME 1.1.1.2

.bashrcへの追記内容

.bashrc

_ssh_comp_func () {
  local cur
  cur=${COMP_WORDS[COMP_CWORD]} 
  COMPREPLY=($(grep 'HOST ' .ssh/config | awk '{print $2}' | grep "${cur}"))
}

complete -F _ssh_comp_func ssh

curに現在の補完中のホスト名が入る。

補完が進むと補完候補が少なくなるように grep "${cur}" している。

わざわざダブルクオートで囲んでいるのはcurに何も入っていないときにエラーが出るのを防ぐためである。

これを応用すると結構好き勝手補完できるようになって便利かもしれない。