将函数的Bash完成委托给带有附加参数的命令



我正试图为我自己的函数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

是否有一种通用方法将自定义函数的完成委托给另一个还包括其他参数的命令?我已经查阅了许多类似问题的答案,这些问题将子命令委托给另一个子命令,如exectime,但我只能完成主命令。

我还尝试定义一个类似这样的自定义完成函数,并委托给__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

相关内容

  • 没有找到相关文章

最新更新