在文件夹中运行“ N”个Shell脚本

时间:2019-04-03 06:08:02

标签: linux bash shell loops automation

我有一段有效的代码可以运行目录中的所有脚本: Run all shell scripts in folder

for f in *.sh; do \
bash "$f" -H || break
done

我也有运行一系列.sh脚本的代码:

for f in {1..3}madeupname.sh; do \
bash "$f" -H || break
done

现在,我不想运行所有.sh脚本或一系列.sh脚本,而是要运行“ N”个.sh脚本,其中N是任意数字,例如3个.sh脚本。

N个文件的运行顺序对我来说并不重要。

2 个答案:

答案 0 :(得分:5)

find脚本,获取head,然后使用xargs执行。

find . -name '*.sh' | head -n 10 | xargs -n1 sh

您可以使用简单的xargs选项与-P0并行运行脚本。您可以使用一些xargs编写xargs sh -c 'bash "$@" -H || exit 125' --脚本,以使xargs以非零状态退出,或者在任何脚本运行失败或出现某种情况后立即退出。

如果您不熟悉xargs,只需执行一个简单的while read循环:

find . -name '*.sh' | head -n 10 | 
while IFS= read -r script; do
    bash "$script" -H || break
done

同时,您必须退出管道子外壳:

while IFS= read -r script; do
    bash "$script" -H || break &
done < <(
     find . -name '*.sh' | head -n 10
)
wait # for all the childs

或在子外壳本身中等待孩子:

find . -name '*.sh' | head -n 10 |
{
    while IFS= read -r script; do
        bash "$script" -H || break &
    done
    wait
}

答案 1 :(得分:1)

通过注释,保持进程运行计数

count=0
for f in *.sh; do
    bash "$f" -H || break
    ((++count>=3)) && break
done