假设我有一个接收路径作为参数的脚本。如何执行该路径中的所有脚本?
假设我有一个接收路径作为参数的脚本。如何执行该路径中的所有脚本?
Answers:
假设路径是您指向目录的路径,请使用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
以获得更多想法。
run-parts /home/you/Dropbox/scripts_to_run
..尽管要小心命名
如果脚本的名称正确,则运行部件将起作用。如果您不想处理重命名脚本以适应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 ]
并且只有两个测试都成功时,才会尝试执行该文件。