Делегировать Bash завершение функции в команду с дополнительными аргументами - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь включить завершение Bash для своей собственной функции с именем kctxt(), которая делегирует kubectl следующим образом:

kctxt() {
  if [[ -z ${1+x} ]]; then
    # show context if no arguments
    kubectl config current-context
  else
    # set new context via completion
    kubectl config use-context "$@"
  fi
}

# For example, get completions just like:
# kubectl config use-context <tab><tab>

$ kctxt <tab><tab>
minikube eks-kube
$ kctxt ▊

Сначала я хочу добавить, что стандартное завершение для kubectl отлично работает для меня на macOS, и я даже установил complete-alias для соответствия alias k=kubectl.

Есть ли способ generi c делегировать завершение пользовательской функции другой команде, которая также включает дополнительные аргументы? Я проконсультировался со многими ответами на подобные вопросы, которые делегируют подкоманду для другой, например exec и time, но все, что я могу получить, - это завершение основной команды.

I Я также пытался определить пользовательскую функцию завершения, подобную этой, и безуспешно делегировать __start_kubectl() (за complete -p kubectl).

_complete_kctxt() {
  COMPREPLY=()

  COMP_WORDS=(config use-context $2)
  COMP_LINE="kubectl ${COMP_WORDS[@]}"

  local prev=${COMP_WORDS[$COMP_CWORD]}
  local cur=${COMP_WORDS[$((++COMP_CWORD))]}

  COMP_POINT=${#COMP_LINE}
  [[ -z "$cur" ]] && ((++COMP_POINT))

  __start_kubectl kubectl $cur $prev
}
complete -F _complete_kctxt kctxt

Я даже пытался отследить завершение kubectl через BASH_COMP_DEBUG_FILE но это довольно сложно понять.

...