给出。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