这有点棘手,让我先设置一下我在这里所做的事情,以便让您了解我想要完成的任务。
我正在读取一组 ssh 配置文件,以从这些文件中获取主机和主机名。我这样做是为了针对特定主机运行自定义脚本,为了实现这一目标,我想尝试编写一个支持主机的 bash 脚本。
我正在提取配置并使用 awk 解析主机和主机名,将它们列在字典中,然后使用该字典中的键来完成使用。
#!/bin/bash
NETWORKS_PATH=~/.ssh/Networks/
files=($(ls $NETWORKS_PATH))
declare -A a_dict
_read_network ()
{
file=$1
while read -r line; do
host=$(awk $line '$1 == "Host" { print $2 }')
done < $file
for hostiter in ${host[@]}; do
hostname=$(ssh -n -tt -G $hostiter | awk '$1 == "hostname" { print $2 }')
a_dict[$hostiter]=$hostname
done
}
_ff_completions()
{
local hosts
for file in ${files[@]}; do
_read_network "$NETWORKS_PATH$file"
done
for key in "${!a_dict[@]}"; do
hosts+="$key "
done
COMPREPLY=$(compgen -W "$hosts" -- "${COMP_WORDS[1]}")
}
complete -F _ff_completions ff
主机名和主机被正确捕获,我能够将它们作为完整的一部分输出,但完整似乎“注入”第一个列出的服务器作为其第一个建议并卡在上面?如果我尝试运行该命令,它会将所有建议作为命令传递。我有点困惑,我对此并不陌生,只是有点缺乏实践。