我正在尝试在 Golang 中运行命令,但看起来它丢失了退出代码,因为错误为零:
func runCommand() []byte, error {
cmd := exec.Command("/bin/bash", "-c", "KUBECONFIG=/tmp/.kube/config helm version")
cmd.Stdin = os.Stdin
cmd.Stderr = os.Stderr
stdOut, err := cmd.StdoutPipe()
if err != nil {
return nil, err
}
if err := cmd.Start(); err != nil {
return nil, err
}
bytes, err := ioutil.ReadAll(stdOut)
if err != nil {
return nil, err
}
if err := cmd.Wait(); err != nil {
return nil, err
}
fmt.Println(string(bytes))
return bytes, nil
}
即使命令返回退出代码 != 0,也会返回 nil。
如果我输入:
$> /bin/bash -c KUBECONFIG=/tmp/.kube/config helm version
$<
$> echo $?
$< 0
如果我输入:
$> /bin/bash -c 'KUBECONFIG=/tmp/.kube/config helm version'
$< ...connection refused
$> echo $?
$< 1
所以我尝试将命令用单引号括起来:
cmd := exec.Command("/bin/bash", "-c", "'KUBECONFIG=/tmp/.kube/config helm version'")
但后来我得到:
/bin/bash: KUBECONFIG=/tmp/.kube/config helm version: No such file or directory
(不用说 /tmp/.kube/config 就在那里,但我不认为 no such 文件或目录指的是它)。
我究竟做错了什么?
谢谢
更新:事实证明我错了。事实上,我尝试了两个命令,出于某种原因,我确信失败的是我上面提到的那个,而第二个命令正在退出,状态代码不同于 0。代码按预期工作,错误不为零如果退出代码!= 0。对此表示抱歉。
GCT1015
相关分类