我发现自己每天都在做...
$ 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)
bash
和zsh
都支持当您按<TAB>
时完成打印命令的脚本。该功能称为可编程完成,您可以在此处找到有关该功能的更多详细信息:zsh 完成。
幸运的是,您不需要编写自己的脚本 - kubectl 为 zsh > 5.2 提供了它。尝试运行此命令:
source <(kubectl completion zsh)
.
另一种选择是使用此工具:https://github.com/mkokho/kubemrr (免责声明:我是作者)。它存在的原因是因为标准完成脚本太慢 - Kubernetes 集群可能需要几秒钟才能回复所有 pod 名称。但是
kubemrr
将名称保留在本地,因此响应几乎立即返回。
对于
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)
我将此函数添加到我的 $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'
我想为所有使用
Oh My Zsh
的人建议更简洁的设置。
当前接受的答案使用命令 kubectl completion zsh
并将它们发送到环境。
我们不这样做,而是将它们放在 plugins
文件夹中,使用相同的命令,但将其修改为:
kubectl completion zsh > ~/.oh-my-zsh/custom/plugins/kubectl.plugin.zsh
现在我们必须在 ~/.zshrc 配置中定义要在 ZSH start 上加载的插件
...
plugins=(
git
...
kubectl
)
...
此解决方案的优点是保持配置干净。 (是的,我知道这是一行,但如果你必须为 10 个插件执行此操作,那么它就会加起来!:))
尝试在 .zshrc 文件的开头添加一行
autoload -U +X compinit && compinit
然后在下面添加另一行
source <(kubectl completion zsh)
现有答案为在 zsh 中启用 kubectl 自动完成提供了出色的解决方案。但是,如果您发现正在运行的源代码<(kubectl completion zsh) noticeably slows down your zsh initialization, here's a way to solve that:
# Disable notifications for background jobs
setopt local_options no_notify no_monitor
# Run the completion script in the background
source <(kubectl completion zsh) &