Завершение многоуровневого Bash

В настоящее время у меня есть файл завершения Bash, который завершает один параметр из списка разрешенных команд для сценария (называемого «pbt»). Это рабочий файл завершения Bash:

_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- домен | стоп-домен] Но если я наберу

pbt deploy <tab>

, он должен дополнить другой набор параметров, например pbt deploy [all | current] . Таким образом, параметры второй команды всегда должны зависеть от первой команды. Как я могу сделать это в файле завершения?

17
задан Ingo Fischer 14 March 2013 в 11:26
поделиться