Bash가 예상대로 실행되지 않고 COMPREPLY의 첫 번째 결과를 캡처한 다음 모든 결과를 명령으로 실행합니까?

Bash가 예상대로 실행되지 않고 COMPREPLY의 첫 번째 결과를 캡처한 다음 모든 결과를 명령으로 실행합니까?

이것은 약간 까다롭습니다. 먼저 여기서 무엇을 하려는지 설정하겠습니다. 그러면 여러분이 내가 달성하려는 작업에 대한 아이디어를 얻을 수 있습니다.

이 파일에서 호스트와 호스트 이름을 가져오기 위해 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

호스트 이름과 호스트가 올바르게 캡처되어 전체의 일부로 출력할 수 있지만 전체는 첫 번째 제안으로 나열된 첫 번째 서버를 "주입"하여 중단되는 것 같습니다. 명령을 실행하려고 하면 모든 제안 사항이 명령으로 전달됩니다. 나는 약간 혼란스럽습니다. 나는 이것에 익숙하지 않고 단지 약간의 연습이 부족합니다.

명령으로 출력하고 실행할 서버 이름입니다.

관련 정보