2009-09-02 18 views
3

私は、バックグラウンドジョブとして並列に割り当てられた異なるパラメータを持つ時間のかかる実行可能ファイルを実行しています。おもちゃの例とその出力は次のとおりです。bashで実行中のバックグラウンドジョブの終了を通知する

bash-3.2$ set -o notify 
bash-3.2$ for ((i=0 ; i < 4 ; i+=2)); do 
> sleep ${i} & 
> done 
[1] 32394 
[2] 32395 
bash-3.2$ [1]- Done     sleep ${i} 
[2]+ Done     sleep ${i} 

各ジョブの実行が終了すると、通知されます。終了メッセージでは、ジョブのコマンドが表示されますが、パラメータが展開されないように、メッセージを見てどのパラメータ値を使用しているかを明確に示す方法はありません。メッセージが欲しいと思うもの

bash-3.2$ [1]- Done     sleep 0 
[2]+ Done     sleep 2 

これは可能ですか?

ありがとうございました!

答えて

1

ない非常にきれい:

for ((i=0 ; i < 4 ; i+=2)); do 
    sleep ${i} && echo -en "\nsleep ${i} "& 
done 

出力は次のようになります。

[1] 29311
[2] 29313

睡眠0 [1] - 完了睡眠$ {i} & & echo -en "\ nsleep $ {i}"
user @ホスト:〜$
睡眠2 [2] +完了睡眠$ {I} & &エコー-en "\ nsleep $ {I}"

機能ビットをそれをneatenできます

myeval() { 
    eval "$*" && echo -en "\n$* " 
} 

次に、あなたが行うことができます。

for ((i=0 ; i < 4 ; i+=2)); do 
    myeval "sleep ${i}"& 
done 

を、出力は次のようになります。

[1] 29635
[2] 29636

睡眠0 [1] - 完了myeval "スリープ$ {I}"
ユーザ@ホスト:〜$
スリープ2 [2] +完了myeval "睡眠$ {I}"

0

あなたが行われ、最後の1まで待つしたいとしている場合...

for ((i=0; i < 4; i+=2)); do 
    long_running_process $i & 
done 

wait 

各long_running_process(シェルスクリプトを前提としています)は、終了直前にステータスメッセージとそれ自身の$ 1を出力できます。

+0

しかし、彼は 'set -o notify'が彼に与える即時のフィードバックを得ていません。 –

関連する問題