1

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

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

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

bsub <switches> "command | colorize"

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

如果我不管它——

bsub <switches> "command"

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

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

为了全面披露,这个 bsub 实际上是通过 perl 中的 system() 调用来调用的。只要 bsub 返回非零,系统调用就应该返回非零并且一切正常。

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

4

1 回答 1

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
于 2015-01-23T14:06:31.063 回答