Virgülle ayrılmış parametreler listesi için tamamlama kuralı oluşturmak istiyorum. Örneğin sunucu adları listesini alan bir komut var:
myscript -s name1,name2,name3
Şu anda aşağıdaki tamamlamayı yazmayı başardım:
_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
}
Ancak en az 2 sorunu var:
- Mevcut değer için öneriler, öneklerinde önceki tüm değerleri içerir.
- Yinelenen değerleri dikkate almaz.
Bu gibi durumlar için en iyi uygulamalar nelerdir? Belki bash tamamlamalarının csv listeleri için bazı işlevleri vardır?
$VARIABLE
, aksi halde kelime kırılması olmaz. sadece kullanın IFS=, LIST=($VARIABLE)
.
IFS=, LIST=("$VARIABLE")
burada $ VARIABLE virgülle ayrılmış değerlerinizi içerir.