Yazdığım bazı özel işlevler için tamamlama işlevleri yazmaya çalışıyorum, ancak en temel işlevlerle bile gerçekten mücadele ediyor gibi görünüyor.
Örnek bir fonksiyon:
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"
}
Bunun iki konumsal argümanı vardır <aws profile name>
ve<environment name>
Tamamlama seçeneklerini <aws profile name>
çalıştırarak dinamik olarak kullanılabilir olmasını
sed -n -E 's/\[([a-zA-Z0-9_\-]+)\]/\1/p' ~/.aws/credentials | tr \\n ' '
ve tamamladığım <environment name>
başka bir işlevi çalıştırarak tamamlanmasını dinamik olarak kullanılabilir olmasını istiyorum eb_names
.
Belgeleri oldukça seyrek ve takip etmesi zor buluyorum. Ben de benzer komutlar için zsh-completions repo gördüm ama ihtiyacım olana benzer bir şey bulmak gibi görünmüyor.
Başlamak için herhangi bir yardım çok takdir edilecektir!
Güncelleme
@ Cuonglm cevabına dayanarak kullandım:
#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 "$@"
Orijinal soruda bahsetmeyi unuttuğum şey, aynı zamanda ikinci argümanın tamamlanmasının ilkine (her ikisi de bazı kodları yürüten dinamik tabanlı) bağımlı olmasını istediğimdi:
$ eb_instances <cursor>TAB
cuonglm test
istediğim tamamlamaları alır. Birini seçtikten sonra ilkini söyleyin ve otomatik tamamlamayı deneyin:
$ eb_instances cuonglm <cursor>TAB
Ben yürüterek tamamlama seçeneklerini oluşturmak istiyorum eb_names cuonglm
ve doğru aday olup olmadığını, mümkünse de, örneğin tamamlama üzerinde ayrıntılı inceleme foo-bar
,
$ eb_instances cuonglm foo<cursor>TAB
Tamamlama seçeneklerini yürüterek oluşturmak istiyorum eb_names cuonglm foo
cuonglm test
sed -n -E 's/\[([a-zA-Z0-9_\-]+)\]/\1/p' ~/.aws/credentials | tr \\n ' '