Golang执行系统命令报错exit status 1无原因提示如何解决
问题原因及修复方案
报错核心原因
- 直接触发错误的原因:你当前代码调用Windows系统的
cmd.exe执行pwd命令,Windows cmd环境默认没有pwd命令,命令执行失败返回状态码1。 - 无法看到具体错误提示的原因:
- 错误分支里先执行了
log.Fatal(err),该方法会直接终止程序,后续打印out的代码永远不会执行 - 你使用的
exec.Command.Output()方法仅捕获命令的标准输出(stdout),命令执行失败时的错误提示会输出到标准错误(stderr),该内容你没有捕获,因此看不到具体报错说明
- 错误分支里先执行了
修复步骤
1. 调整错误处理逻辑,捕获完整输出
替换Output()为CombinedOutput(),可以同时捕获stdout和stderr的内容,出错时直接打印完整输出就能看到命令的具体报错信息。同时调整错误分支的执行顺序,先打印输出再退出。
2. 适配对应系统的命令调用规则
- 如果是在Windows系统运行:可以把
pwd替换为cmd支持的cd命令,或者切换调用powershell执行pwd - 如果是在Linux/macOS系统运行:把调用
cmd /C改为调用/bin/bash -c,适配类Unix系统的shell环境
修复后的跨平台兼容示例代码
package main import ( "fmt" "log" "os/exec" "runtime" ) func executeCmd(cmd string) string { var shell, flag string // 自动适配当前系统的shell if runtime.GOOS == "windows" { shell = "cmd" flag = "/C" } else { shell = "/bin/bash" flag = "-c" } // CombinedOutput同时捕获标准输出和错误输出 out, err := exec.Command(shell, flag, cmd).CombinedOutput() if err != nil { // 先打印完整的命令输出,再抛出错误 fmt.Printf("命令执行错误,输出内容:\n%s\n", string(out)) log.Fatal(err) } fmt.Println(string(out)) return string(out) } func main() { // 自动适配系统对应打印路径的命令 var cmd string if runtime.GOOS == "windows" { cmd = "cd" } else { cmd = "pwd" } result := executeCmd(cmd) fmt.Println("返回结果:", result) }
补充说明
如果你需要在Windows上运行pwd命令,可以把shell切换为powershell,对应修改shell和flag部分即可:
shell = "powershell" flag = "-Command"
修改后执行pwd命令就可以正常返回当前路径。
内容的提问来源于stack exchange,提问作者max.syntax
相关产品推荐
相关产品推荐

