我正试图用以下代码行在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,因此使用第一个选项更安全。