Supondo que você queira bsub
de cada script que corresponda ao padrão "$testbench_dir"/cell/delay_*_*.sp.py
, você poderá substituir seu script pelo seguinte:
#!/bin/sh
config_dir=/proj/ABC/users/nhannguyen/work/verif/qc/input
testbench_dir=/proj/ABC/users/nhannguyen/work/verif/qc/testbench/TT_p025c
for py in "$testbench_dir"/cell/delay_*_*.sp.py; do
bsub "$py" -c "$config_dir/sim.config.py" -m 1
done
Este é um script /bin/sh
, não um script csh
, mas isso não deve importar.
Se você precisar garantir que os scripts sejam executados em uma ordem específica (o acima classificaria os arquivos de script em ordem lexicográfica), faça um loop duplo:
#!/bin/sh
config_dir=/proj/ABC/users/nhannguyen/work/verif/qc/input
testbench_dir=/proj/ABC/users/nhannguyen/work/verif/qc/testbench/TT_p025c
maxi=300 # the largest number I in delay_I_J.sp.py
maxj=3 # the largest number J in delay_I_J.sp.py
i=0
until [ "$i" -gt "$maxi" ]; do
j=0
until [ "$j" -gt "$maxj" ]; do
bsub "$testbench_dir/cell/delay_${i}_${j}.sp.py" -c "$config_dir/sim.config.py" -m 1
j=$(( j + 1 ))
done
i=$(( i + 1 ))
done
Se você quiser que o script envie apenas trabalhos em lotes de 50 e que seja capaz de informá-lo na linha de comando sobre o lote a ser enviado, por exemplo,
./script 3
(executaria o lote 3, ou seja, trabalhos 100-149)
#!/bin/sh
batch=$1
if [ -z "$batch" ]; then
printf 'Usage: %s batchnumber\n' "$0" >&2
exit 1
fi
bstart=$(( (batch - 1)*50 ))
bend=$(( batch*50 - 1 ))
printf 'Submitting batch %d (jobs %d to %d)\n' "$batch" "$bstart" "$bend"
config_dir=/proj/ABC/users/nhannguyen/work/verif/qc/input
testbench_dir=/proj/ABC/users/nhannguyen/work/verif/qc/testbench/TT_p025c
count=0
for py in "$testbench_dir"/cell/delay_*_*.sp.py; do
if [ "$count" -gt "$bend" ]; then
break
fi
if [ "$count" -ge "$bstart" ]; then
bsub "$py" -c "$config_dir/sim.config.py" -m 1
fi
count=$(( count + 1 ))
done