在LSF命令中返回管道命令的退出代码

时间:2015-01-22 22:32:13

标签: perl pipe exit-code lsf

我希望我的问题不太具体......

有很多问题和答案关于如何返回用于管道输入另一个命令的命令的退出代码,但我的情况有点不同......

我有一个通用命令,我将输出管道输出到语法着色脚本。该命令通过LSF的bsub执行。像这样:

bsub <switches> "command | colorize"

假设该命令返回非零退出值。由于colorize命令,bsub返回零退出值。

如果我不管它 -

bsub <switches> "command"

退出值是命令的正确非零值。

有没有办法通过管道获得非零值?

对于完全公开,这个bsub实际上是通过perl中的system()调用来调用的。只要bsub返回非零值,系统调用应该返回非零值且一切都很好。

我查看了如何通过$ PIPESTATUS从管道命令中获取退出代码,但我不认为它在这种情况下有效,因为1)我是从perl而不是shell运行的,2)我不知道bsub是否会返回。

1 个答案:

答案 0 :(得分:2)

继Llama先生的评论之后:

  

像bash这样的shell会提供像-o pipefail这样的选项,它会导致管道链返回第一个非零返回码(如果有的话)。

您可以将管道放入如下脚本:

#!/bin/bash
set -o pipefail
command | colorize

然后通过将脚本直接假冒到bsub

来提交作业
bsub <switches> < yourscript.sh

作为旁注,您还可以在脚本中定义<switches>,如下所示:

#!/bin/bash
#BSUB -n 4
#BSUB -o outfile.txt
set -o pipefail
command | colorize

然后以这种方式将其变为bsub

bsub < yourscript.sh