假设我有一个脚本,它接收一个路径作为参数。我怎样才能执行位于该路径上的所有脚本?
答案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-parts 将起作用。如果您不想重命名脚本以适应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 ]
),并且只有这两个测试都成功时才会尝试执行该文件。