- 打开或创建~/.bashrc文件, 添加以下内容:
__complete_ssh_host() {
## 获取需要补全的单词
local KNOWN_FILE=~/.ssh/known_hosts
if [ -r $KNOWN_FILE ]; then
local KNOWN_LIST=$(cut -f 1 -d ' ' $KNOWN_FILE | cut -f 1 -d ',' | grep -v '^[0-9[]')
fi
local CONFIG_FILE=~/.ssh/config
if [ -r $CONFIG_FILE ]; then
local CONFIG_LIST=$(awk '/^Host [A-Za-z]+/ {print $2}' $CONFIG_FILE)
fi
local HOSTS_FILE=/etc/hosts
if [ -r $HOSTS_FILE ]; then
local HOSTS_LIST=$(awk '/^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/ {print $2}' $HOSTS_FILE)
fi
## COMP_CWORD: 包含了当前命令行的所有单词 ; COMP_CWORD: 光标所在的单词在 COMP_WORDS 数组中的索引
local PARTIAL_WORD="${COMP_WORDS[COMP_CWORD]}"
## 使用compgen命令生成补全列表并进行筛选
COMPREPLY=( $(compgen -W "$KNOWN_LIST$IFS$CONFIG_LIST$IFS$HOSTS_LIST" -- "$PARTIAL_WORD") )
return 0
}
## 指定在调用ssh、scp时,使用函数进行tab补全
complete -F __complete_ssh_host ssh
complete -F __complete_ssh_host scp
- source ~/.bashrc
- 然后ssh 命令后按TAB,可以看到补全列表。