如何找出 Kubectl ZSH 自动完成脚本失败的原因?

How to find out why Kubectl ZSH autocompletion script fails?

我 运行 在 Ubuntu 18.04 上使用 zsh 而不是 bash。要获得 kubectl 完成,它应该像添加

一样简单
source <(kubectl completion zsh)

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

将命令更改为

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

我在加载终端时看到 "failure"。所以我的结论是脚本出了问题。该脚本消除了所有输出,所以我不知道到底出了什么问题。

有谁知道哪里出了问题?或者也许特定脚本所在的位置,所以我可以更改

_complete kubectl 2>/dev/null

_complete kubectl 2>~/logs.txt

请记住以下命令:

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 中使用它),当您 运行 它在 new shell 这当然不会影响你当前 运行ning shell 的环境,但会告诉你什么可能成为问题。

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

zsh -x kubectl-autocompletion-script

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

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

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

autoload -U +X compinit && compinit