如何执行某个路径下的所有脚本?

如何执行某个路径下的所有脚本?

假设我有一个脚本,它接收一个路径作为参数。我怎样才能执行位于该路径上的所有脚本?

答案1

假设路径指的是目录路径,则使用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以获得更多想法。

答案2

如果您的脚本具有正确的名称,则 Run-p​​arts 将起作用。如果您不想重命名脚本以适应run-parts复杂的命名方案,您可以做一些简单的事情

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

这将尝试执行在 中找到的所有文件(和目录)~/target2>/dev/null重定向错误消息,因此在尝试运行目录或非可执行文件时不会发出抱怨。

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

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

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

相关内容