我编写了一个小型Go应用程序,它使用此处概述的技术从stdin
中读取:https://flaviocopes.com/go-shell-pipes/
我这样调用它:cmd | fsjl
(其中fsjl
是我的应用程序)
麻烦的是,即使0
退出cmd
,退出代码也始终是1
。
如何从cmd
“转发”退出代码?
答案 0 :(得分:4)
这不是Go程序的工作。对于管理整个管道的人来说,这是一项工作。管道元素看不到彼此的退出状态。
例如,在bash中,您可以使用pipefail
:
如果设置,则管道的返回值是以非零状态退出的最后一个(最右边)命令的值,或者如果管道中的所有命令成功退出,则返回零。默认情况下,此选项是禁用的。
下面是一个示例,using a subshell将pipefail
的效果限制为一行:
(set -o pipefail && cmd | fsjl)
您不能总是假设bash,但是在其他shell中有ways可以做类似的事情。