我试图在Visual Studio Code 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命令。因此,我尝试用代码更新第一行:
  • out, err := exec.Command("/bin/bash", "-c", "kubectl version").Output()
  • out, err := exec.Command("/bin/bash", "-c", "kubectl", "version").Output()
  • out, err := exec.Command("kubectl", "version").Output()
  • out, err := exec.Command("kubectl version").Output()

  • 所有这些尝试都会导致执行失败,超时时间约为10秒。 kubectl version在外部外壳中可以正常工作。
    我还应注意,我能够执行其他工具,例如out, err := exec.Command("/bin/bash", "-c", "pluto", "version").Output(),没有问题。
    我的方法有什么问题?
    编辑:我正在使用Visual Studio Code v1.47.1的内置终端开发和运行程序。事实证明,使用外部终端启动我的程序可以毫无问题地执行命令。但是我需要知道内置VS Code终端和标准外壳之间的区别可以解释此问题...

    最佳答案

    事实证明,通过使用Visual Studio Code的集成终端,无法从外部外壳中检索环境变量。
    更具体地说,缺少KUBECONFIG命令成功执行所需的kubectl环境变量。
    为了解决这个问题,可以在使用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))
    

    关于go - 运行Go exec.Command()的Visual Studio Code在“kubectl版本”中超时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63115250/

    10-16 16:40