У меня есть следующий за ним рабочий bash_completion кодFetch список значений для auto_complete
_supdeploy()
{
local cur prev opts cword
_init_completion || return
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
first="${COMP_WORDS[1]}"
opts="option1 option2 --help"
case "${first}" in
option1)
if [[ "$cur" == * ]]; then
COMPREPLY=($(compgen -W '--arg1 --arg2 --arg3 --help' -- "$cur"))
fi
return 0
;;
option2)
if [[ "$cur" == * ]]; then
COMPREPLY=($(compgen -W '--arg1 --arg2 --arg3 --help' -- "$cur"))
fi
return 0
;;
*)
COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
return 0
;;
esac
} &&
complete -F _supdeploy supdeploy
Когда я закладка, я сначала получить список opts
, и если я использую один из ОПТС, нажмите вкладку снова, я получаю список arg для этого параметра.
Что я пытаюсь сделать, это предварительно заполнить некоторые из этих аргументов, которые имеют назначенное им значение со списком на выбор. Примеры, на которые я смотрел, где все используют их с верхнего уровня, например, в моем случае, но я хочу использовать его на втором уровне. Я уже пытался реализовать 2-й if
внутри цикла case и проверить, например, если $cur
является одним из аргументов. Но он никогда не работал, все еще просто печатал полный список на вкладке.
Какова цель '[[ "$ дворняжка" == *]]'? «' * 'соответствует любой строке, включая пустую строку." поэтому этот тест всегда будет успешным. –
'' $ {first} "' может/должно быть "$ first", нет никакой разницы, но позже это canon. –
'[[" $ cur "== *]]' сделает вкладку показом всех доступных аргументов для данной команды. – derchris