我有一段有效的代码可以运行目录中的所有脚本: 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个文件的运行顺序对我来说并不重要。
答案 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