我正试图为我自己的函数kctxt()
启用Bash完成,该函数委托给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
。
是否有一种通用方法将自定义函数的完成委托给另一个还包括其他参数的命令?我已经查阅了许多类似问题的答案,这些问题将子命令委托给另一个子命令,如exec
和time
,但我只能完成主命令。
我还尝试定义一个类似这样的自定义完成函数,并委托给__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
我甚至试图通过BASH_COMP_DEBUG_FILE
来追踪kubectl
的完成,但这很难理解。
您尝试过用这种方式定义命令吗?
alias kctxt="kubectl config current-context"
它适用于安装了bash-completion
的其他别名。.bash_aliases
中的别名和.bash_completion
中的那行
complete -F _complete_alias kctxt