我在一个文件夹中有许多.sh
脚本,并希望一个接一个地运行它们。单个脚本可以执行为:
bash wget-some_long_number.sh -H
假设我的目录是/dat/dat1/files
我怎么能一个接一个地运行bash wget-some_long_number.sh -H
?
我理解这些内容应该有效:
for i in *.sh;...do ....; done
用这个:
for f in *.sh; do # or wget-*.sh instead of *.sh
bash "$f" -H
done
如果要在脚本失败时停止整个执行:
for f in *.sh; do
bash "$f" -H || break # execute successfully or break
# Or more explicitly: if this execution fails, then stop the `for`:
# if ! bash "$f" -H; then break; fi
done
你要运行它,例如,x1.sh
,x2.sh
,...,x10.sh
:
for i in `seq 1 10`; do
bash "x$i.sh" -H
done
有一种更简单的方法,你可以使用run-parts
命令执行文件夹中的所有脚本:
run-parts /path/to/folder
我遇到了这个问题,我无法使用循环和run-parts与cron一起工作。
foo () {
bash -H $1
#echo $1
#cat $1
}
cd /dat/dat1/files #change directory
export -f foo #export foo
parallel foo ::: *.sh #equivalent to putting a & in between each script
你使用GNU parallel,它执行目录中的所有内容,增加的buff会以更快的速度发生。更不用说它不只是脚本执行,你可以在函数中放任何命令,它会工作。