从命令记录退出代码

我正在尝试使用以下代码行在 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


哆啦的时光机
浏览 99回答 1
1回答

慕容708150

当然,有两种方法: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 ,因此使用第一个选项更安全。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go