【发布时间】:2015-01-22 22:32:12
【问题描述】:
我希望我的问题不是太具体...
关于如何返回通过管道传送到另一个命令的命令的退出代码有很多问题和答案,但我的情况有点不同......
我有一个通用命令,我将输出传递到语法着色脚本。该命令通过 LSF 的 bsub 执行。像这样的:
bsub <switches> "command | colorize"
假设命令返回一个非零退出值。由于 colorize 命令,bsub 返回零退出值。
如果我不管它--
bsub <switches> "command"
退出值是命令中正确的非零值。
有没有办法用管道获取非零值?
为了全面披露,这个 bsub 实际上是通过 perl 中的 system() 调用来调用的。只要 bsub 返回非零值,系统调用就应该返回非零值,一切正常。
我查看了如何通过 $PIPESTATUS 从管道命令中获取退出代码,但我认为它在这种情况下不起作用,因为 1)我是从 perl 而不是 shell 运行的,并且 2)我没有知道 bsub 是否会返回。
【问题讨论】:
-
一些像 bash 这样的 shell 提供了一个像
-o pipefail这样的选项,这将导致管道链返回第一个非零返回码(如果有的话)。我不熟悉 bsub,但希望它提供类似的选项。如果没有,您可以像bsub <switches> "bash -o pipefail -c 'command | colorize'"一样调用 bash,但如果command需要任何字符转义,它就会变得混乱。