これは少しトリッキーです。まず、ここで何をしたいのかを設定します。そうすれば、私が達成したいことについてのアイデアを得ることができます。
このファイルからホスト名とホスト名を取得するために、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
ホスト名とホストは正しくキャプチャされ、全体の一部として出力できますが、全体は最初の提案としてリストされている最初のサーバーを「注入」して中断されるようです。コマンドを実行しようとすると、すべての提案がコマンドに渡されます。私は少し混乱しています。私はこれに慣れておらず、ちょっとした練習が不足しています。