【问题标题】:Can I use autocompletion for kubectl in zsh?我可以在 zsh 中对 kubectl 使用自动完成功能吗?
【发布时间】:2017-07-10 10:59:59
【问题描述】:

我发现自己每天都在做……

$ kubectl --context=foo get pods
  < copy text manually >
$ kubectl --context=foo logs dep1-12345678-10101

我想循环匹配资源

$ kubectl --context=foo logs dep1<TAB>

但这似乎对我的库存设置没有任何作用。有什么想法吗?

osx 10.12.3 kubectl v1.4.5 zsh zsh 5.2 (x86_64-apple-darwin16.0)

【问题讨论】:

    标签: autocomplete kubernetes zsh kubectl


    【解决方案1】:

    bashzsh 都支持在您按下 &lt;TAB&gt; 时完成打印命令的脚本。该功能称为可编程完成,您可以在此处找到更多详细信息:zsh completion

    幸运的是,您不需要编写自己的脚本 - kubectl 为 zsh > 5.2 提供了它。尝试运行此命令:source &lt;(kubectl completion zsh)

    另一个选择是使用这个工具:https://github.com/mkokho/kubemrr (免责声明:我是作者)。它存在的原因是因为标准完成脚本太慢 - Kubernetes 集群回复所有 pod 名称可能需要几秒钟。但是kubemrr 将名称保留在本地,因此响应几乎立即返回。

    【讨论】:

    • 要在以后的shell中自动加载,你可以echo "source &lt;(kubectl completion zsh)" &gt;&gt; ~/.zshrc
    • 这太棒了。花了 30 分钟试图在 Centos 中完成 bash,直到我找到了这个。
    • 如果您在 OSX 上运行此程序并获得 command not found: compdef,请查看此答案:unix.stackexchange.com/a/477909/12737
    【解决方案2】:

    我将此函数添加到我的 $HOME/.zshrc。

    它会延迟加载kubectl的完整功能

    kubectl () {
        command kubectl $*
        if [[ -z $KUBECTL_COMPLETE ]]
        then
            source <(command kubectl completion zsh)
            KUBECTL_COMPLETE=1 
        fi
    }
    

    单机版:

    (( ${+commands[kubectl]} )) && alias kubectl='test -z $C_KUBE && C_KUBE=1 && source <(command kubectl completion zsh); command kubectl'
    

    【讨论】:

    • (( ${+commands[kubectl]} )) &amp;&amp; alias kubectl='test -z $C_KUBE &amp;&amp; C_KUBE=1 &amp;&amp; source &lt;(command kubectl completion zsh); command kubectl'
    • 您能解释一下您在上一条评论中留下的命令的作用吗?
    • @MutantMahesh 1. 如果存在可执行二进制文件kubectl,则设置别名; 2.检查环境变量C_KUBE是否存在。如果不存在,源补全脚本并设置环境变量; 3. 让别名命令 'kubectl' 像真正的命令 'kubectl' 一样工作
    【解决方案3】:

    对于oh-my-zsh,启用kubectl自动补全最简单的方法是在~/.zshrc中添加kubectl插件:

    # somewhere in your .zshrc
    # kubectl: The kubectl completion script for Zsh can be generated with the command kubectl completion zsh. Sourcing the completion script in your shell enables kubectl autocompletion.
    # kube-ps1: A script that lets you add the current Kubernetes context and namespace configured on kubectl to your Bash/Zsh prompt strings
    plugins=(git kubectl Kube-ps1)
    

    【讨论】:

    • 我必须将 kube-ps1 添加到列表中才能使其工作 plugins=(git kubectl kube-ps1) + 另一行 source &lt;(kubectl completion zsh)
    • 我不需要kube-ps1,但我确实需要plugins=(git kubectl)source &lt;(kubectl completion zsh)
    【解决方案4】:

    尝试在.zshrc文件的开头添加一行

    autoload -U +X compinit && compinit
    

    然后在下面添加另一行

    source <(kubectl completion zsh)
    

    【讨论】:

      猜你喜欢
      • 2022-08-15
      • 2014-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-08
      相关资源
      最近更新 更多