为了账号安全,请及时绑定邮箱和手机立即绑定

从命令记录退出代码

从命令记录退出代码

Go
哆啦的时光机 2022-10-24 09:40:39
我正在尝试使用以下代码行在 go 中运行命令。    cmd := exec.Command(shell, `-c`, unsliced_string)      cmd.Stderr = os.Stderr     cmd.Stdout = os.Stdout     cmd.Stdin = os.Stdin     cmd.Run()变量 shell 是从 os.Getenv("$SHELL") 收集的,变量 unsliced_string 是从命令行提供的参数。我需要命令运行后的状态/错误代码。因此,如果正在运行的命令(来自命令)是exit 100,我需要一个保存错误状态代码的变量,在本例中为 100总的来说,我需要一个变量来记录命令运行的错误代码我尝试过使用 .Error() 但是它exit status 100不仅仅是100 作为最后的手段,我可以使用 strings.Replaceall 或 strings.Trim
查看完整描述

1 回答

?
慕容708150

TA贡献1831条经验 获得超4个赞

当然,有两种方法:


cmd := exec.Command(shell, `-c`, unsliced_string) 

err := cmd.Run()

if exitErr, ok := err.(*exec.ExitError); ok {

    exitCode := exitErr.ExitCode()

    fmt.Println(exitCode)

} else if err != nil {

    // another type of error occurred, should handle it here

    // eg: if $SHELL doesn't point to an executable, etc...

}

cmd := exec.Command(shell, `-c`, unsliced_string) 

_ := cmd.Run()

exitCode := cmd.ProcessState.ExitCode()

fmt.Println(exitCode)

我强烈建议您使用第一个选项,这样您就可以捕获所有exec.ExitError's 并按照您的意愿处理它们。如果命令没有退出或者底层命令由于另一个错误而永远不会运行,则不会填充 cmd.ProcessState ,因此使用第一个选项更安全。


查看完整回答
反对 回复 2022-10-24
  • 1 回答
  • 0 关注
  • 98 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信