我的代码:
#!/bin/bash
scriptspy =(
'/scs/sp1.py',
'/scs/sp2.py',
'/scs/sp3.py',
'/scs/sp4.py',
'/scs/spweb.py',
'/scs/sp11.py',
'/scs/spservice.py',
....
)
for i in scriptspy;
do python3.7 $i;
done
我的目标是运行目录中包含python且不需要一个一个运行的文件列表。
分别是python3.7 sp1.py
糟糕:我无法执行目录中的所有.py文件,我需要将列表及其名称传递给循环。
答案 0 :(得分:2)
使用glob:
shopt -s nullglob
for i in /scs/sp[1-4].py; do
python3.7 "$i"
done
为防止文件不存在,我在这里打开nullglob
。
同样,始终引用变量是个好习惯。
顺便说一句,您的数组创建和取消引用语法是错误的。 LMK如果您需要详细信息。
答案 1 :(得分:1)
简单地:
#!/bin/bash
printf '%s\n' *.py | xargs -n1 python3.7
答案 2 :(得分:1)
我将与 GNU Parallel 同时完成它们:
dates
[1] "43018" "43343" "42272" "42913" "43110" "43384"
如果您想查看将要执行的操作,而无需实际执行任何操作,请使用:
parallel python3.7 ::: sp[1-4].py
如果只想依次运行它们,请依次使用:
parallel --dry-run ...
答案 3 :(得分:-1)
如果shell脚本不应该等待所有程序完成,则应该并行运行python程序
declare -a scriptspy=("/scs/sp1.py" "/scs/sp2.py", "/scs/sp3.py","/scs/sp4.py")
for i in "${scriptspy[@]}":
do (python3.7 "$i" ; echo "script $i done") &
done