Bashは期待どおりに実行されず、COMPRPLYの最初の結果をキャプチャしてから、すべての結果をコマンドとして実行しますか?

Bashは期待どおりに実行されず、COMPRPLYの最初の結果をキャプチャしてから、すべての結果をコマンドとして実行しますか?

これは少しトリッキーです。まず、ここで何をしたいのかを設定します。そうすれば、私が達成したいことについてのアイデアを得ることができます。

このファイルからホスト名とホスト名を取得するために、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

ホスト名とホストは正しくキャプチャされ、全体の一部として出力できますが、全体は最初の提案としてリストされている最初のサーバーを「注入」して中断されるようです。コマンドを実行しようとすると、すべての提案がコマンドに渡されます。私は少し混乱しています。私はこれに慣れておらず、ちょっとした練習が不足しています。

コマンドで出力して実行するサーバ名です。

関連情報