如何执行路径中的所有脚本?


Answers:


14

假设路径是您指向目录的路径,请使用run-parts。来自man run-parts

run-parts - run scripts or programs in a directory

首先,您需要为要运行的所有脚本设置执行权限。通常,run-parts将忽略目录,并且非可执行文件也位于该目录中。

尽管在运行之前,您应该通过以下--test选项检查将运行哪些文件:

run-parts --test /path/to/directory

我应该提到run-parts对要执行的脚本有严格的命名约定:

If neither the --lsbsysinit option nor the --regex option is given 
then the names must consist entirely of ASCII upper- and
lower-case letters, ASCII digits, ASCII underscores, and ASCII minus-hyphens.

检查man run-parts以获得更多想法。


通过阅读,我发现:#!/ bin / bash scripts_to_run_dir = / home / you / Dropbox / scripts_to_run for“ $ scripts_to_run_dir” / *中的脚本是否测试-x“ $ script”; 然后“ $ script”文件完成对我有用,您怎么看?
Lautaro Alvarez

@LautaroAlvarez您对该脚本所做的操作,可以通过一个简单的命令轻松完成run-parts /home/you/Dropbox/scripts_to_run..尽管要小心命名
。.– heemayl 2015年

运行部件很酷。但是它适用于cron.d并作为cron.notice写入syslog。但这是不错的想法来源,例如跳过临时文件和备份文件...
mmv-ru

9

如果脚本的名称正确,则运行部件将起作用。如果您不想处理重命名脚本以适应run-parts复杂的命名方案,则可以执行以下操作:

for file in ~/target/*; do $file 2>/dev/null; done

这将尝试执行中找到的所有文件(和目录)~/target。该2>/dev/null重定向错误消息,以便尝试运行目录或不可执行的文件时,它不会抱怨。

或者,您可以尝试更高级的

for file in ~/target/*; do
    [ -f "$file" ] && [ -x "$file" ] && "$file"
done

这将检查每个结果是否是文件([ -f $file ]),可执行文件(),[ -x $file ]并且只有两个测试都成功时,才会尝试执行该文件。


在我正在工作的项目(一个分叉的仓库)中,这个代码对我来说非常理想-github.com/rattfieldnz/Vaprobash/blob/master/setup_projects.sh
罗布
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.