Je voudrais créer une règle d'achèvement pour la liste des paramètres séparés par des virgules. Par exemple, j'ai une commande qui reçoit la liste des noms de serveurs:
myscript -s name1,name2,name3
En ce moment, j'ai réussi à écrire après l'achèvement:
_myscript () {
local cur prev opts
_get_comp_words_by_ref cur prev
opts='-s'
servers='name1 name2 name3'
if [[ ${cur} == -* ]] ; then
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
else
case "${prev}" in
-s)
if [[ "$cur" == *,* ]]; then
local realcur prefix
realcur=${cur##*,}
prefix=${cur%,*}
COMPREPLY=( $(compgen -W "${servers}" -P "${prefix}," -- ${realcur}) )
else
COMPREPLY=( $(compgen -W "${servers}" -- ${cur}) )
fi
;;
*)
# do nothing
;;
esac
fi
}
Mais il a au moins 2 problèmes:
- Les suggestions de valeur actuelle incluent toutes les valeurs précédentes dans leur préfixe.
- Il ne prend pas en compte les valeurs en double.
Quelles sont les meilleures pratiques pour de tels cas? Peut-être que bash-complétions a des fonctions groupées pour les listes csv?
$VARIABLE
, sinon la rupture de mot ne se produit pas. il suffit d'utiliser IFS=, LIST=($VARIABLE)
.
IFS=, LIST=("$VARIABLE")
où $ VARIABLE contient vos valeurs séparées par des virgules.