2

bashスクリプトに問題があります。基本的に、私のスクリプトではコマンドを実行します

bjobs -u $1

$ 1はスクリプト引数であり、クラスター上のユーザーのIDです。ユーザー$1にクラスター上で実行中/保留中のジョブがない場合、bjobsは次のように出力します。

 No unfinished jobs found

stdoutに。また、終了ステータスは255です。ユーザー$ 1にジョブがある場合、bjobsは次のように出力します。

JOBID   USER    STAT  QUEUE      FROM_HOST   EXEC_HOST   JOB_NAME   SUBMIT_TIME
45823   .......
45824   .......
.
.

終了ステータスは0です。awkでbjobsの出力を解析したいと思います。私は試した

bjobs -u $1 | awk '...'

ここで、「...」は私のawk解析プログラムです。これはあまりうまく機能しません。ユーザー$1に実行中/保留中のジョブがない場合、文字列「未完了のジョブが見つかりません」がawkに渡されないためです。同じことが起こります

bjobs -u $1 > foo
awk '...' foo 

助言がありますか?

4

2 に答える 2

6

たぶん、そのメッセージ(ある種のエラーであると思います)がSTDOUTではなくSTDERRに届いているのでしょう。

>を使用してbashのIOストリームをファイル記述子にリダイレクトできます。2はSTDERRです。

試す:

bjobs -u $1 2>&1 | awk '...'

そして、それがあなたのためにそれを解決するかどうか見てください。2>&1の部分は、STDERR(2)をSTDOUT(1)にリダイレクトすることを意味し、STDOUTはawkにパイプされるものです。

詳細:http ://www.tldp.org/LDP/abs/html/io-redirection.html

于 2012-10-17T13:43:27.927 に答える
1

bjobsが「未完了のジョブが見つかりません」をstderrに出力する可能性があります。

stderrをstdoutにパイプするために2>&1を追加します。

bashIOリダイレクトの詳細

于 2012-10-17T13:39:34.253 に答える