首页 > 解决方案 > 如何找出 Kubectl ZSH 自动完成脚本失败的原因?

问题描述

我在 Ubuntu 18.04 上运行并使用 zsh 而不是 bash。要完成 kubectl,它应该像添加一样简单

source <(kubectl completion zsh)

到 ~/.zshrc 配置。我已经这样做了,但是 kubectl 自动完成功能不起作用。我已经多次重新加载终端。

将命令更改为

source <(kubectl completion zsh) && echo success || echo failure

我在加载终端时看到“失败”。所以我的结论是脚本出了点问题。该脚本忽略了所有输出,所以我不知道到底出了什么问题。

有谁知道可能出了什么问题?或者可能是特定脚本所在的位置,所以我可以更改

_complete kubectl 2>/dev/null

_complete kubectl 2>~/logs.txt

标签: ubuntuzshkubectl

解决方案


请记住以下命令:

source <(kubectl completion zsh)

只需获取命令的输出

kubectl completion zsh

生成 kubectl autocompletion script 并将其打印到标准输出。而不是以这种方式使用它,您可以简单地将其输出重定向到文件:

kubectl completion zsh > kubectl-autocompletion-script

换行:

_complete kubectl 2>/dev/null

至:

_complete kubectl 2>~/logs.txt

或您喜欢的脚本的任何其他部分。

很难猜测在您的特定情况下可能有什么问题,但您可以轻松调试脚本。仅出于调试目的,您可以尝试将其作为任何其他 shell 脚本运行。如果在获取脚本时出现任何错误(基本上是在当前 shell 中运行它),当您在新 shell中运行它时也会看到这些错误,这当然不会影响当前运行 shell 的环境,但会告诉你可能是什么问题。

要打开调试模式,您需要使用-x标志(或-xv用于详细输出):

zsh -x kubectl-autocompletion-script

这应该告诉您问题出在哪里。

还有一件事:作为添加source <(kubectl completion zsh)到您的替代方案,~/.zshrc您可能希望将脚本放置在/etc/zsh/zshrc.d/其中基本上对所有用户执行相同但全局的操作。


推荐阅读