Я пытаюсь включить завершение 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
но это довольно сложно понять.