В настоящее время у меня есть файл завершения Bash, который завершает единственный параметр из списка разрешенных команд для script (называемый "pbt" ). Это рабочий файл Bash Completion:
_pbt_complete()
{
local cur goals
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
goals='asadmin clean deploy'
cur=`echo $cur`
COMPREPLY=($(compgen -W "${goals}" ${cur}))
}
complete -F _pbt_complete pbt
Итак, если я звоню
pbt <tab>
Bash завершается всеми разрешенными командами (asadmin, clean, deploy), что хорошо.
Теперь я хочу добавить "второй" уровень к завершению. Так, например, если я напечатаю
pbt asadmin <tab>
он должен заполнить все параметры, доступные только внутри asadmin - "environment" (которые я также определю внутри файла завершения Bash), например, pbt asadmin [start-domain|stop-domain]
Но если я напечатаю
pbt deploy <tab>
он должен выполнить другой набор параметров, например pbt deploy [all|current]
. Поэтому параметры для второй команды всегда должны зависеть от первой команды. Как я могу это сделать в файле завершения?