当我想在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
感谢。
答案 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)
您可以使用find
和xargs
执行此操作:
find . -type f -name "*.sh" | xargs -I sh {}