簡體   English   中英

shell腳本運行多個文件

[英]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.pya2.pya3.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM