如何为Bash中自定义的kubectl函数启用Tab自动补全
自定义kubectl封装函数的自动补全实现方案
完全可以实现,只需要给kgp函数绑定对应的bash补全规则,即可支持命名空间、Pod名的Tab补全,具体操作如下:
前置检查
先确认kubectl原生的bash补全已经在环境中生效,若未生效,先在~/.bashrc中追加以下配置:
source <(kubectl completion bash)
保存后执行source ~/.bashrc,确认原生kubectl命令的补全可以正常触发。
补全配置实现
将原有的kgp函数和下面的补全规则一起写到~/.bashrc中:
# 原有自定义函数 kgp () { kubectl get po -n $1 $2 } # kgp专属补全函数 _kgp_complete() { local cur COMPREPLY=() cur="${COMP_WORDS[COMP_CWORD]}" # 第一个位置参数:补全集群内所有命名空间 if [ $COMP_CWORD -eq 1 ]; then COMPREPLY=( $(compgen -W "$(kubectl get ns -o jsonpath='{.items[*].metadata.name}' 2>/dev/null)" -- "$cur") ) return 0 fi # 第二个位置参数:补全指定命名空间下的所有Pod名称 if [ $COMP_CWORD -eq 2 ]; then local target_ns="${COMP_WORDS[1]}" COMPREPLY=( $(compgen -W "$(kubectl get po -n "$target_ns" -o jsonpath='{.items[*].metadata.name}' 2>/dev/null)" -- "$cur") ) return 0 fi } # 将补全规则绑定到kgp函数 complete -F _kgp_complete kgp
生效验证
保存~/.bashrc后执行source ~/.bashrc重载配置,即可验证效果:
- 输入
kgp后按Tab,会自动列出集群所有可用命名空间,输入命名空间前缀按Tab可自动补全命名空间名 - 输入完命名空间后空格,按Tab会自动列出该命名空间下所有Pod,输入Pod前缀按Tab可自动补全Pod名
注:上述脚本加了错误输出重定向,当输入的命名空间不存在时不会在终端抛出报错,不影响正常输入。如果后续需要给
kgp加更多透传参数,只需要对应扩展补全函数的判断逻辑即可。
内容的提问来源于stack exchange,提问作者Kelvin Baumgart
相关产品推荐
相关产品推荐

