从.bash_profile获取目录中的所有文件

时间:2009-09-14 19:09:36

标签: bash shell scripting

我需要允许多个应用程序附加到系统变量(在这种情况下为$ PYTHONPATH)。我正在考虑指定一个目录,每个应用程序可以添加一个模块(例如.bash_profile_modulename)。在〜/ .bash_profile:

中尝试过类似的东西
find /home/mike/ -name ".bash_profile_*" | while read FILE; do
source "$FILE"
done;

但它似乎不起作用。

9 个答案:

答案 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

中获取其他bash完成脚本

答案 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

这个解决方案是迄今为止我发现的最具代表性的解决方案:

  • 如果没有匹配的文件
  • ,则不会出现任何错误
  • 适用于多个shell,包括bash,zsh
  • 跨平台(Linux,MacOS,...)

答案 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_*