私が書いたいくつかのカスタム関数の補完関数を書き込もうとしていますが、最も基本的な関数でさえ本当に苦労しているようです。
関数の例は次のとおりです。
function eb_instances() {
if [ "$#" -ne 2 ]; then
echo "Usage eb_instances <aws profile name> <environment name>"
echo "e.g.:"
echo " eb_instances production kraken-prod-api"
return 1
fi
aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" "Name=tag:Name,Values=$2" --profile=$1 --output=json | jq -r ".Reservations[].Instances[].PrivateIpAddress"
}
これには2つの位置引数が<aws profile name>
あり、<environment name>
<aws profile name>
実行することで完了オプションを動的に使用可能にし
sed -n -E 's/\[([a-zA-Z0-9_\-]+)\]/\1/p' ~/.aws/credentials | tr \\n ' '
、<environment name>
呼び出した別の関数を実行することで完了を動的に使用できるようにしますeb_names
。
ドキュメントが非常にまばらで、従うのが難しいと感じています。同様のコマンドのzsh-completionsリポジトリも見ましたが、必要なものに似たものを見つけることができないようです。
始めるのに助けていただければ幸いです!
更新
@cuonglmの答えに基づいて、私は使用しました:
#compdef ebinstances
_ebinstances() {
local state
_arguments \
'1: :->aws_profile'\
'*: :->eb_name'
case $state in
(aws_profile) _arguments '1:profiles:($(sed -n -E "s/\[([a-zA-Z0-9_\-]+)\]/\1/p" ~/.aws/credentials | tr \\n " "))' ;;
(*) compadd "$@" foo bar
esac
}
_ebinstances "$@"
元の質問で言及するのを忘れていたのは、2番目の引数の完了が最初の引数に依存することです(両方とも動的ベースであるコードの実行です)、たとえば:
$ eb_instances <cursor>TAB
cuonglm test
必要な完了を取得します。最初の発言を選択して、オートコンプリートを試みます:
$ eb_instances cuonglm <cursor>TAB
私は実行して完了オプションを生成するeb_names cuonglm
正しい候補であった場合、例えば補完に可能な場合、また、ドリルダウンfoo-bar
、
$ eb_instances cuonglm foo<cursor>TAB
実行して完了オプションを生成したい eb_names cuonglm foo
cuonglm test
から来てsed -n -E 's/\[([a-zA-Z0-9_\-]+)\]/\1/p' ~/.aws/credentials | tr \\n ' '