1

私の問題があまり具体的でないことを願っています...

別のコマンドにパイプされたコマンドの終了コードを返す方法については、多くの質問と回答がありますが、私の場合は少し異なります...

出力をシンタックスカラーリングスクリプトにパイプする汎用コマンドがあります。このコマンドは、LSF の bsub を介して実行されます。このようなもの:

bsub <switches> "command | colorize"

コマンドがゼロ以外の終了値を返すとします。colorize コマンドにより、bsub はゼロの終了値を返しています。

配管しないと--

bsub <switches> "command"

終了値は、コマンドからのゼロ以外の正しい値です。

パイプでゼロ以外の値を取得する方法はありますか?

完全な開示のために、この bsub は実際には perl の system() 呼び出しを介して呼び出されています。bsub がゼロ以外を返す限り、システム コールはゼロ以外を返す必要があり、すべて問題ありません。

$PIPESTATUS 経由でパイプされたコマンドから終了コードを取得する方法を調べましたが、1) シェルではなく perl から実行しており、2) bsub かどうかわからないため、この場合は機能しないと思います。それを返します。

4

1 に答える 1

2

ラマ氏のコメントに続いて、次のように述べています。

-o pipefailbash などの一部のシェルは、パイプ チェーンがゼロ以外の最初のリターン コード (存在する場合) を返すようなオプションを提供します。

次のように、パイプラインをスクリプトに入れることができます。

#!/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 に答える