2016-07-28 10 views
3

一部を動作しません。問題は、最後の並列タスクが開始される前にクリーンアップ(rm)が実行されることです。どのようにこのような行動を防ぐには?すべて開始されたジョブは、(manページより)バッシュ待ちは私のコードの

parallel --semaphore --wait 

例を完了するのを

+0

スクリプトで待機する非同期プロセスはありません。 '&'どこでも... – Kusalananda

+0

'wait'はシェルの直接の子を待つだけです。他のプロセスが開始したプロセス( '' parallel'など)で ''待機 'することはできません。 – chepner

答えて

2

は、彼らの例のように、あなたは待つようにこのコマンドを使用する必要があります。 コマンドSEMを並列--semaphoreの別名です。 (あなたが使用--semaphorenameを待つ必要は除く)

for i in *.log ; do 
    echo $i 
    sem -j10 gzip $i ";" echo done 
    done 
    sem --wait 
+0

'wait'部分は' sem'自体から呼び出さなければなりません。私はドキュメントでそれを逃した、ありがとう。 – alex

0

サム・ダニエルズの答えは完全に正しいのですが、semは本当に遅いです。代わりに関数を使用することを検討してください。

doit() { 
    i="$1" 
    a2_exec ${i} ${temp_zmat_folder_path}${temp_zmat_folder}/ ${outs_folder} 
} 
export -f doit 
export temp_zmat_folder_path 
export temp_zmat_folder 
export outs_folder 
${parallel_dir}parallel -j${cap} doit ::: "${r_arr[@]}"