আমি লিখেছি এমন কিছু কাস্টম ফাংশনগুলির জন্য সমাপ্তির ফাংশনগুলি লেখার চেষ্টা করছি, তবে মনে হচ্ছে এটি বেশিরভাগ মৌলিক বিষয়গুলির সাথেই লড়াই করছে।
একটি উদাহরণ ফাংশন:
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"
}
এটিতে দুটি স্থিতি যুক্তি রয়েছে, <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- পরিপূর্ণতা রেপোও দেখেছি তবে আমার যা প্রয়োজন তা সদৃশ কিছু খুঁজে পাচ্ছে না।
যে কোনও সহায়তা শুরু করা অনেক প্রশংসা হবে!
হালনাগাদ
@ কুওগলমের উত্তরের ভিত্তিতে আমি ব্যবহার করেছি:
#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 "$@"
মূল প্রশ্নে আমি যা উল্লেখ করতে ভুলে গেছি তা হ'ল, আমিও চেয়েছিলাম যে দ্বিতীয় যুক্তির সমাপ্তিটি প্রথমটির উপর নির্ভর করবে (যা উভয়ই কিছু কোডকে কার্যকরভাবে চালিত করে), উদাহরণস্বরূপ:
$ 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 ' '