在目录外壳脚本中执行python文件列表

时间:2019-12-17 19:25:47

标签: bash shell

我的代码:

#!/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文件,我需要将列表及其名称传递给循环。

4 个答案:

答案 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