Vorrei creare una regola di completamento per l'elenco dei parametri separati da virgola. Ad esempio, ho un comando che riceve un elenco di nomi di server:
myscript -s name1,name2,name3
In questo momento sono riuscito a scrivere il seguente completamento:
_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
}
Ma ha almeno 2 problemi:
- I suggerimenti per il valore corrente includono tutti i valori precedenti nel loro prefisso.
- Non considera valori duplicati.
Quali sono le migliori pratiche per tali casi? Forse bash-completions ha alcune funzioni in bundle per csv-lists?
$VARIABLE
, altrimenti la rottura delle parole non accade. basta usare IFS=, LIST=($VARIABLE)
.
IFS=, LIST=("$VARIABLE")
dove $ VARIABLE contiene i tuoi valori separati da virgola.