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 № 1Au 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.