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

Lau*_*rez 15 bash scripts

假设我有一个接收路径作为参数的脚本。我如何执行位于该路径中的所有脚本?

hee*_*ayl 16

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

run-parts - run scripts or programs in a directory
Run Code Online (Sandbox Code Playgroud)

首先,您需要对要运行的所有脚本设置执行权限。通常run-parts会忽略目录,并且不可执行的文件也驻留在该目录中。

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

run-parts --test /path/to/directory
Run Code Online (Sandbox Code Playgroud)

我应该提到,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.
Run Code Online (Sandbox Code Playgroud)

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


ter*_*don 10

如果您的脚本具有正确的名称,则运行部分将起作用。如果你不想处理重命名脚本以适应run-parts复杂的命名方案,你可以做一些简单的事情

for file in ~/target/*; do $file 2>/dev/null; done
Run Code Online (Sandbox Code Playgroud)

这将尝试执行在~/target. 该2>/dev/null重定向错误消息,以便尝试运行目录或不可执行的文件时,它不会抱怨。

或者,您可以尝试更复杂的

for file in ~/target/*; do
    [ -f "$file" ] && [ -x "$file" ] && "$file"
done
Run Code Online (Sandbox Code Playgroud)

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