이것은 약간 까다롭습니다. 먼저 여기서 무엇을 하려는지 설정하겠습니다. 그러면 여러분이 내가 달성하려는 작업에 대한 아이디어를 얻을 수 있습니다.
이 파일에서 호스트와 호스트 이름을 가져오기 위해 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
호스트 이름과 호스트가 올바르게 캡처되어 전체의 일부로 출력할 수 있지만 전체는 첫 번째 제안으로 나열된 첫 번째 서버를 "주입"하여 중단되는 것 같습니다. 명령을 실행하려고 하면 모든 제안 사항이 명령으로 전달됩니다. 나는 약간 혼란스럽습니다. 나는 이것에 익숙하지 않고 단지 약간의 연습이 부족합니다.