记录命令中的退出代码



我正试图用以下代码行在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作为最后的手段,我只能使用字符串。替换全部或字符串。微调

当然,有两种方法:

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并按照自己的意愿处理它们。也可cmd。如果命令尚未退出,或者由于另一个错误导致基础命令从未运行,则不会填充ProcessState,因此使用第一个选项更安全。

最新更新