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

时间:2019-10-04 07:21:52

标签: ubuntu zsh kubectl

我正在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

1 个答案:

答案 0 :(得分:1)

请记住以下命令:

Public Class MyTest

    Public Property DTO As DateTimeOffset = #1900-01-01#

End Class

Public Sub TestMethod()

    Dim myDate As String = "{""DTO"": ""1900-01-01T00:00:00""}"

    Dim o = JsonConvert.DeserializeObject(Of MyTest)(myDate, 
        New JsonSerializerSettings With {
            .DateParseHandling = DateParseHandling.DateTimeOffset,
            .DateTimeZoneHandling = DateTimeZoneHandling.Utc
        })

 End Sub

简单地提供命令的输出

source <(kubectl completion zsh)

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

kubectl autocompletion script

更改行:

kubectl completion zsh > kubectl-autocompletion-script

收件人:

_complete kubectl 2>/dev/null

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

很难猜测在特定情况下可能出什么问题,但是您可以轻松地调试脚本。仅出于调试目的,您可以尝试像其他任何Shell脚本一样运行它。如果在采购脚本时出现任何错误(基本上是在当前shell中运行),则在 new shell 中运行脚本时也会看到这些错误当然不会影响您当前正在运行的Shell的环境,但是会告诉您可能是问题所在。

要打开调试模式,您需要使用_complete kubectl 2>~/logs.txt 标志(或将-x用于详细输出):

-xv

这应该告诉您问题所在的位置。

又一件事:除了将zsh -x kubectl-autocompletion-script 添加到source <(kubectl completion zsh)之外,您可能希望将脚本放置在~/.zshrc中,该脚本基本上可以相同,但全局,适用于所有用户。