मैं अपने द्वारा लिखे गए कुछ कस्टम फ़ंक्शंस के लिए पूर्ण कार्य लिखने की कोशिश कर रहा हूं, लेकिन लगता है कि वास्तव में सबसे बुनियादी लोगों के साथ भी संघर्ष हो रहा है।
एक उदाहरण समारोह है:
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- पूर्ण रेपो देखा है, लेकिन मैं क्या जरूरत के समान कुछ खोजने के लिए प्रतीत नहीं कर सकते।
किसी भी मदद की शुरुआत की बहुत सराहना की जाएगी!
अपडेट करें
@ Congonglm के उत्तर के आधार पर , मैंने उपयोग किया:
#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 ' '