我试图在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/