分享bash配置,fzf补全ssh

fzf可以读~/.ssh/config文件来补全ssh命令,用着很方便。有一点不足就是只能显示Host,主机太多记不住,最好能有个长一点的描述。

我把.fzf/shell/completion.bash里的_fzf_complete_ssh函数稍微改造了一下,可以显示Hostname外加一个描述字段#Desc

_fzf_complete_ssh() {
    _fzf_complete '+m' "$@" < <(
    cat ~/.ssh/config ~/.ssh/config.d/* /etc/ssh/ssh_config 2> /dev/null | grep -i -e '^host ' -e 'hostname' -e '#Desc' | grep -v '[*?]' | \
        awk '/^Host/{if (NR!=1)print ""; printf $2} /Hostname/{printf "  [%s]",$2} /#Desc/{printf "  [%s]",$2}' | sort -u
  )
}

_fzf_complete_ssh_post() {
  awk '{printf $1}'
}

complete -F _fzf_complete_ssh -o default -o bashdefault ssh

比如~/.ssh/config配置成:

Host server-gpu
  Hostname 192.168.10.214
  User emacs
  #Desc GPU机器
Host server-1
  Hostname 172.16.1.201
  User emacs
  #Desc 服务部署机器
Host server-ftp
  Hostname 172.16.1.182
  User emacs
  #Desc FTP服务器

补全效果:

image

4 个赞

可以提交上游试试,感觉挺有用

描述字段不是标准化,感觉不太适合提交,就给自己图方便 :grinning: