[英]shell script run multiple files
我想在for循環中使用shell腳本,並行運行100個文件。
目前,我有一個以下格式的shell腳本:
#!/bin/bash
NUM=10
python a1.py $((NUM + 0)) &
python a2.py $((NUM + 2)) &
python a3.py $((NUM + 4)) &
python a4.py $((NUM + 6)) &
python a5.py $((NUM + 8)) &
現在,如果我有a1.py
, a2.py
, a3.py
.... a100.py
,並且我想並行運行它們,我該如何在for循環中執行它?
如果您有bash
版本4並運行此:
echo {10..208..2}
你會得到這個:
10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60
62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100 102 104 106 108
110 112 114 116 118 120 122 124 126 128 130 132 134 136 138 140 142 144 146
148 150 152 154 156 158 160 162 164 166 168 170 172 174 176 178 180 182 184
186 188 190 192 194 196 198 200 202 204 206 208
看起來像你的系列。 然后,如果你想並行運行大量的工作,我會使用GNU Parallel 。 這為您提供{#}
作為職位編號的占位符。 所以,如果你運行這個:
parallel -k echo {#} {} ::: {10..208..2}
你會得到這個:
1 10
2 12
3 14
4 16
5 18
因此,要運行您的實際腳本,例如:
parallel -k --dry-run 'python a{#}.py {}' ::: {10..208..2}
樣本輸出
python a1.py 10
python a2.py 12
python a3.py 14
python a4.py 16
...
...
如果看起來不錯,請在沒有--dry-run
情況下再次--dry-run
並且不使用-k
來保持輸出,以便更容易調試。
TLDR;
我最簡潔的答案是GNU Parallel :
parallel python a{#}.py {} ::: {10..208..2}
或者如果你沒有bash
版本4:
parallel python a{#}.py {} ::: $(seq 10 2 208)
NUM=10
for ((i=0; i<100; i++)); do echo python a$(($i+1)).py $(($NUM+$i*2)); done
輸出:
python a1.py 10 python a2.py 12 python a3.py 14 . . . python a98.py 204 python a99.py 206 python a100.py 208
如果這看起來沒問題,請使用:
NUM=10
for ((i=0; i<100; i++)); do python a$(($i+1)).py $(($NUM+$i*2)) & done
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.