我需要允许多个应用程序附加到系统变量(在这种情况下为$ PYTHONPATH)。我正在考虑指定一个目录,每个应用程序可以添加一个模块(例如.bash_profile_modulename)。在〜/ .bash_profile:
中尝试过类似的东西find /home/mike/ -name ".bash_profile_*" | while read FILE; do
source "$FILE"
done;
但它似乎不起作用。
答案 0 :(得分:69)
不会
for f in ~/.bash_profile_*; do source $f; done
足够吗?
编辑:简化ls ~/.bash_*
的额外图层以指导bash globbing。
答案 1 :(得分:17)
我同意上面的丹尼斯;你的解决方案应该工作(虽然“完成”之后的分号不应该是必要的)。但是,您也可以使用for循环
for f in /path/to/dir*; do
. $f
done
在Dirk的回答中,没有必要替换ls的命令。这是在/etc/bash_completion
中使用的机制,用于在/etc/bash_completion.d
答案 2 :(得分:15)
Oneliner(仅适用于bash / zsh):
source <(cat *)
答案 3 :(得分:3)
aus man bash:
源文件名[参数]
ein source config / *
第一个参数将被获取,config /中的所有其他文件将成为它所源自的脚本的参数。
答案 4 :(得分:1)
for file in "$(find . -maxdepth 1 -name '*.sh' -print -quit)"; do source $file; done
这个解决方案是迄今为止我发现的最具代表性的解决方案:
答案 5 :(得分:0)
str="$(find . -type f -name '*.sh' -print)"
arr=( $str )
for f in "${arr[@]}"; do
[[ -f $f ]] && . $f --source-only || echo "$f not found"
done
我测试过,我正在使用它。 只是修改了。找到指向您脚本的文件夹后,它将起作用。
答案 6 :(得分:0)
您可以使用此功能来获取目录中的所有文件(如果有):
http://
额外的文件检查处理由于目录为空而导致模式不匹配的特殊情况(这会使循环变量扩展为模式字符串本身)。
答案 7 :(得分:-1)
好的,所以我最终做了什么;
eval "$(find perf-tests/ -type f -iname "*.test" | while read af; do echo "source $af"; done)"
这将在当前shell中执行一个源并使用maintian所有变量......
答案 8 :(得分:-3)
我认为你应该能够做到
source ~/.bash_profile_*