Bashのループ並列化

Bashのループ並列化

特定のディレクトリを取得し、特定の入力ファイルに対して特定の計算を実行するループを持つBashスクリプトがあります。その後、そのディレクトリで終了し、異なる入力ファイルを使用して別のディレクトリで同じ操作を実行します。計算に時間がかかり、並列化したいです。

私のスクリプトをどのように修正できますか?これを行うオプションはありますか?

myscript.sh

cd MainDir
for dir in *
  do
      cd ${dir}
      LD_LIBRARY_PATH="$software"/ "$software"/calc -i /home/files/"$dir.txt" -l /home/Str/Art.pdb -a 5.0 -rf /home/file/prot -cpu 1 opt -w ${dir}_res > ${dir}_WPA.log
     cd .. 
  done

-cpu コマンドを使用して CPU 使用量を示します。自由に使用できるCPUが多く、より多くのタスクを並列に処理するにはどうすればよいですか?

たとえば、3つの異なる入力ファイルがある場合は、次のコマンドを一緒に(別のディレクトリで)実行したいと思います。

cd 1
LD_LIBRARY_PATH="$software"/ "$software"/calc -i /home/files/1.txt -l /home/Str/Art.pdb -a 5.0 -rf /home/file/prot -cpu 1 opt -w 1_res > 1_WPA.log
-----------
cd 2
LD_LIBRARY_PATH="$software"/ "$software"/calc -i /home/files/2.txt -l /home/Str/Art.pdb -a 5.0 -rf /home/file/prot -cpu 1 opt -w 2_res > 2_WPA.log
-----------
cd 3
LD_LIBRARY_PATH="$software"/ "$software"/calc -i /home/files/3.txt -l /home/Str/Art.pdb -a 5.0 -rf /home/file/prot -cpu 1 opt -w 3_res > 3_WPA.log

誰でも私を助けることができますか?ありがとうございます。

ベストアンサー1

&コマンドの最後に以下を追加してバックグラウンドで送信できます。

for i in 1 2 3 4; do
    (
        cd dir
        command
        [...]
    ) &
done
wait # pause until all background processes are terminated

おすすめ記事