/ Achèvement / bash avec différentes options basées sur la première valeur - bash, bash-completion

achèvement de bash avec différentes options basées sur la première valeur - bash, achèvement de bash

Je suis en train d’écrire une bash_completionscript pour l'un de nos outils. Je cherchais de l'aide dans les scripts apt-get et chkconfig. Fondamentalement, ce que je veux faire est d’obtenir une sélection d’options différente en fonction de la première valeur. Il peut y avoir plus d'une option pour une valeur.

command <value1> <--option1> <--option2> ...
command <value2> <--option3> <--option4> ...

En regardant le script apt-get, il renverra la même liste d'options pour toute première valeur. Donc ce n'est pas ce dont j'ai besoin.

Voici ce que j'ai eu jusqu'à présent:

 _supdeploy()
{
local cur prev opts cword
_init_completion || return

COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts="deploy destroy supported list fulllist status fullstatus getip shutdown powerOff powerOn"

case "${prev}" in
deploy)
if [[ "$cur" == -* ]]; then
if [[ $cword -eq 2 || $cword -eq 3 || $cword -eq 4 ]]; then
COMPREPLY=( $( compgen -W "--hostname --os --version" -- "$cur" ) )
fi
fi
return 0
;;
destroy)
if [[ "$cur" == -* ]]; then
COMPREPLY=( $( compgen -W "--name --silent" -- "$cur" ) )
fi
return 0
;;
*)
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
;;
esac

} &&
complete -F _supdeploy supdeploy

Je reçois une sélection différente d'options pour déployer et détruire. Mais je ne peux en utiliser qu'un -- option. Quand j'essaye d'utiliser -- encore une fois, rien ne se passe, et sans le -- Je reçois la liste des opts.

C’est probablement quelque chose de facile, mais je ne peux pas trouver l’erreur ici pour le moment. Je l'ai aussi essayé sans le $cword avant, même résultat

Réponses:

1 pour la réponse № 1

Au lieu de prev, vous voulez juste regarder la valeur du premier argument à chaque fois:

case ${COMP_WORDS[1]} of

Cela devient un peu plus compliqué si vous autorisez les options "générales" à précéder la sous-commande, mais en général, vous souhaitez examiner le premier argument sans option, pas nécessairement l'argument précédent.