Me gustaría crear una regla de finalización para la lista de parámetros separados por comas. Por ejemplo, tengo un comando que recibe la lista de nombres de servidores:
myscript -s name1,name2,name3
En este momento he logrado escribir después de completar:
_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
}
Pero tiene al menos 2 problemas:
- Las sugerencias para el valor actual incluyen todos los valores anteriores en su prefijo.
- No considera valores duplicados.
¿Cuáles son las mejores prácticas para tales casos? ¿Quizás bash-completions tiene algunas funciones incluidas para las listas csv?
$VARIABLE
, de lo contrario no se romperán las palabras. solo usa IFS=, LIST=($VARIABLE)
.
IFS=, LIST=("$VARIABLE")
donde $ VARIABLE contiene sus valores separados por comas.