我可以在zsh中使用自动完成kubectl吗?

Pla*_*ato 16 zsh autocomplete kubernetes kubectl

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

$ kubectl --context=foo get pods
  < copy text manually >
$ kubectl --context=foo logs dep1-12345678-10101
Run Code Online (Sandbox Code Playgroud)

我想通过匹配资源循环

$ kubectl --context=foo logs dep1<TAB>
Run Code Online (Sandbox Code Playgroud)

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

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

mko*_*kho 33

无论bashzsh支持,当你按下那个完成打印命令脚本<TAB>.该功能称为可编程copmletion,您可以在此处找到有关它的更多详细信息:zsh completion.

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

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

  • 要在将来的shell中自动加载,你可以做`echo'source <(kubectl completion zsh)">>〜/ .zshrc` (6认同)
  • 如果您在 OSX 上运行此程序并收到“命令未找到:compdef”,请检查此答案:https://unix.stackexchange.com/a/477909/12737 (2认同)

wwe*_*eir 8

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

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

kubectl

  • 您能解释一下您在上一条注释中留下的命令是什么吗? (2认同)

Max*_*eng 7

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

# somewhere in your .zshrc
plugins=(git kubectl)
Run Code Online (Sandbox Code Playgroud)


mal*_*isi 7

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

autoload -U +X compinit && compinit
Run Code Online (Sandbox Code Playgroud)

然后在下面添加另一行

source <(kubectl completion zsh)
Run Code Online (Sandbox Code Playgroud)


the*_*gel 6

我想为所有使用Oh My Zsh. 当前接受的答案使用该命令kubectl completion zsh并将它们发送到环境。我们不这样做,而是将它们放在plugins文件夹中,使用相同的命令,但将其修改为:

kubectl completion zsh > ~/.oh-my-zsh/custom/plugins/kubectl.plugin.zsh

现在我们必须在~/.zshrc配置中定义要在 ZSH start 上加载的插件

...

plugins=(
  git
  ...
  kubectl
)

...
Run Code Online (Sandbox Code Playgroud)

该解决方案的优点是保持配置干净。(是的,我知道这是一行,但如果你必须为 10 个插件执行此操作,那么它就会加起来!:))