Saya mencoba menulis fungsi penyelesaian untuk beberapa fungsi kustom yang saya tulis, tetapi tampaknya benar-benar berjuang dengan yang paling dasar sekalipun.
Contoh fungsi adalah:
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"
}
Ini memiliki dua argumen posisi, <aws profile name>
dan<environment name>
Saya ingin opsi penyelesaian <aws profile name>
tersedia secara dinamis dengan menjalankan
sed -n -E 's/\[([a-zA-Z0-9_\-]+)\]/\1/p' ~/.aws/credentials | tr \\n ' '
, dan penyelesaian untuk <environment name>
tersedia secara dinamis dengan menjalankan fungsi lain yang saya panggil eb_names
.
Saya menemukan dokumentasi sangat jarang dan sulit untuk diikuti. Saya juga melihat repo zsh-completions untuk perintah yang sama tetapi sepertinya tidak dapat menemukan sesuatu yang mirip dengan yang saya butuhkan.
Bantuan apa pun untuk memulai akan sangat dihargai!
Memperbarui
Berdasarkan jawaban @ cuonglm , saya menggunakan:
#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 "$@"
Apa yang saya lupa sebutkan dalam pertanyaan awal adalah, bahwa saya juga ingin penyelesaian argumen kedua bergantung pada yang pertama (keduanya bersifat dinamis yang menjalankan beberapa kode), misalnya:
$ eb_instances <cursor>TAB
cuonglm test
mendapatkan penyelesaian yang saya inginkan. Setelah saya pilih ucapkan yang pertama, dan coba lengkapi secara otomatis:
$ eb_instances cuonglm <cursor>TAB
Saya ingin menghasilkan opsi penyelesaian dengan mengeksekusi eb_names cuonglm
, dan jika memungkinkan, juga, menelusuri penyelesaian misalnya jika kandidat yang benar adalah foo-bar
,
$ eb_instances cuonglm foo<cursor>TAB
Saya ingin menghasilkan opsi penyelesaian dengan mengeksekusi eb_names cuonglm foo
sumber
cuonglm test
berasal darised -n -E 's/\[([a-zA-Z0-9_\-]+)\]/\1/p' ~/.aws/credentials | tr \\n ' '
(cuonglm test)
dengan($(sed -n -E 's/\[([a-zA-Z0-9_\-]+)\]/\1/p' ~/.aws/credentials | tr \\n ' '))
, ubahcompadd "$@" prod staging dev
kecompadd "$@" $(eb_names)
.eb_names
argumen pertama, yaitu,production
ataustaging
, bagaimana saya melakukannya? Terima kasih banyak, saya sudah mendapatkan beberapa hal diurutkan dengan ini.$1
atau$2
, tetapi tidak ada dadu.