26

我每天发现自己在做...

$ 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)

4

4 回答 4

58

两者都bash支持zsh在您按下 时完成打印命令的脚本<TAB>。该功能称为可编程完成,您可以在此处找到更多详细信息:zsh 完成

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

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

于 2017-02-21T09:39:03.793 回答
9

我将此函数添加到我的 $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'
于 2018-01-11T08:47:17.267 回答
8

对于oh-my-zsh,启用 kubectl 自动完成的最简单方法是在以下位置添加kubectl插件~/.zshrc

# 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)
于 2020-09-16T06:25:20.333 回答
1

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

autoload -U +X compinit && compinit

然后在下面添加另一行

source <(kubectl completion zsh)
于 2021-10-28T16:36:30.440 回答