如何获取管道过程的退出代码?

时间:2018-06-21 23:27:35

标签: go

我编写了一个小型Go应用程序,它使用此处概述的技术从stdin中读取:https://flaviocopes.com/go-shell-pipes/

我这样调用它:cmd | fsjl(其中fsjl是我的应用程序)

麻烦的是,即使0退出cmd,退出代码也始终是1

如何从cmd“转发”退出代码?

Here is my source code

1 个答案:

答案 0 :(得分:4)

这不是Go程序的工作。对于管理整个管道的人来说,这是一项工作。管道元素看不到彼此的退出状态。

例如,在bash中,您可以使用pipefail

  

如果设置,则管道的返回值是以非零状态退出的最后一个(最右边)命令的值,或者如果管道中的所有命令成功退出,则返回零。默认情况下,此选项是禁用的。

下面是一个示例,using a subshellpipefail的效果限制为一行:

(set -o pipefail && cmd | fsjl)

您不能总是假设bash,但是在其他shell中有ways可以做类似的事情。