在bash函数中启用kubectl的tab自动完成



给出。bashrc中的bash函数,如

kgp () {
kubectl get po -n $1 $2
}

是否有可能让kubectl自动完成k8s资源(如名称空间/pod)的工作?例如,如果我使用

kubectl get po -n nsprefix podprefix

我可以选择自动完成前缀。而位置参数,当我调用

kgp nsprefix podprefix

我必须输入整个资源名称。

是的,这是因为bash-completion只理解命令,不是别名或新功能了。你会在alias whee=/bin/ls的一个小例子中经历同样的事情然后whee <TAB>什么也不做因为它没有递归;到别名中,可以肯定的是不会试图调用你的函数来找出它可能接受的参数。这可能是灾难性的

欢迎您为自定义kgp创建一个新的complete处理程序,但这是您获得所需行为的唯一方法

_kgp_completer() {
local cur prev words cword
COMPREPLY=()
_get_comp_words_by_ref -n : cur prev words cword
if [[ $cword == 1 ]] && [[ -z "$cur" ]]; then
COMPREPLY=( $(echo ns1 ns2 ns3) )
elif [[ $cword == 2 ]] && [[ -z "$cur" ]]; then
COMPREPLY=( $(echo pod1 pod2 pod3) )
fi
echo "DEBUG: cur=$cur prev=$prev words=$words cword=$cword COMPREPLY=${COMPREPLY[@]}" >&2
}
complete -F _kgp_completer kgp