You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang执行系统命令报错exit status 1无原因提示如何解决

问题原因及修复方案

报错核心原因

  • 直接触发错误的原因:你当前代码调用Windows系统的cmd.exe执行pwd命令,Windows cmd环境默认没有pwd命令,命令执行失败返回状态码1。
  • 无法看到具体错误提示的原因:
    1. 错误分支里先执行了log.Fatal(err),该方法会直接终止程序,后续打印out的代码永远不会执行
    2. 你使用的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 19:54:03