Unix - 如何在目录中获取多个shell脚本?

时间:2009-12-26 23:48:07

标签: unix shell

当我想在Unix 中执行一些shell脚本时(假设我在脚本所在的目录中),我只需输入:

./someShellScript.sh

当我想“source”(例如在当前shell中运行,而不是在新shell中运行)时,我只需输入相同的命令“。”(或与“source”命令等效)之前:

. ./someShellScript.sh


而现在是棘手的部分。当我想在当前目录中执行“多个” shell脚本(假设所有带.sh后缀的文件)时,我输入:

find . -type f -name *.sh -exec {} \;

“我应该使用什么命令来”源“目录中的多个shell脚本”
到目前为止我试过这个但是它不起作用:

find . -type f -name *.sh -exec . {} \;

它只是抛出了这个错误:

find: `.': Permission denied


感谢。

3 个答案:

答案 0 :(得分:13)

for file in *.sh
do . $file
done

答案 1 :(得分:0)

尝试使用以下版本的Jonathan代码:

export IFSbak = $IFS;export IFS="\0"
for file in `find . -type f -name '*.sh' -print0`
do source "$file"
end
export IFS=$IFSbak

问题在于shell的工作方式,以及'。'本身不是一个命令(这也不是源头)。当你运行find时,shell将自行分叉然后转入查找过程,这意味着任何环境变量或其他环境内容都会进入查找过程(或者,更有可能的是,为每个exec的新进程找到forks本身)。 / p>

另请注意,如果文件名中有空格,您的命令(和Jonathan's)将无效。

答案 2 :(得分:0)

您可以使用findxargs执行此操作:

find . -type f -name "*.sh" | xargs -I sh {}