Visual Studio 代码 运行 Go exec.Command() 超时 "kubectl version"

Visual Studio Code running Go exec.Command() times out with "kubectl version"

我正在尝试在 Visual Studio 代码 v1.47.1.

中的 Golang 应用程序中执行一些 kubectl 命令

我目前使用的代码如下:

out, err := exec.Command("/bin/bash", "-c", "kubectl").Output()

if err != nil {
        fmt.Println("Failed to execute")
        fmt.Println(err)
}

fmt.Println(string(out))

这执行得很好,输出类似于我机器上 shell 中出现的输出。

但是,我想执行命令kubectl version。因此,我尝试用代码更新第一行:

所有这些尝试都会导致执行在约 10 秒的超时后失败。 kubectl version 在外部 shell.

中工作正常

我还应该注意到,我可以毫无问题地执行其他工具,例如 out, err := exec.Command("/bin/bash", "-c", "pluto", "version").Output()

我的方法有什么问题?

编辑 :我正在开发 运行 我的程序,内置终端 Visual Studio Code v1.47.1。事实证明,使用外部终端启动我的程序可以毫无问题地执行命令。但是我需要知道内置 VS Code 终端和标准 shell 之间有什么区别可以解释这个问题...

事实证明,通过使用 Visual Studio 代码的集成终端,无法从外部 shell 检索环境变量。 更具体地说,缺少成功执行 kubectl 命令所需的 KUBECONFIG 环境变量。

为了解决这个问题,可以在使用时定义环境变量 exec.Command():

KUBECONFIG := "/Users/path_to_kubeconfig/kubeconfig.yaml"

cmd_config := exec.Command("/bin/bash","-c", cmd)
cmd_config.Env = os.Environ()
cmd_config.Env = append(cmd_config.Env, "KUBECONFIG="+ KUBECONFIG)
out, err := cmd_config.Output()

if err != nil {
    fmt.Printf("Failed to execute command")
}

fmt.Println(string(out))