每次都要source - 从.bash_profile获取目录中的所有文件



每次都要source.bashrc (6)

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

find /home/mike/ -name ".bash_profile_*" | while read FILE; do
source "$FILE"
done;

但它似乎不起作用。


Answer #1

Oneliner(仅适用于bash / zsh):

source <(cat *)

Answer #2

aus man bash:

源文件名[参数]

ein source config / *

第一个参数将被获取,config /中的所有其他文件将成为它所源自的脚本的参数。


Answer #3

岂不

 for f in ~/.bash_profile_*; do source $f; done

够了吗?

编辑ls ~/.bash_*额外图层被简化为直接bash globbing。


Answer #4

您可以使用此函数来获取目录中的所有文件(如果有):

source_files_in() {
    local dir="$1"

    if [[ -d "$dir" && -r "$dir" && -x "$dir" ]]; then
        for file in "$dir"/*; do
           [[ -f "$file" && -r "$file" ]] && . "$file"
        done
    fi
}

额外的文件检查处理由于目录为空而导致模式不匹配的极端情况(这使得循环变量扩展为模式字符串本身)。


Answer #5

我想你应该能够做到

source ~/.bash_profile_*


Answer #6
for file in "$(find . -maxdepth 1 -name '*.sh' -print -quit)"; do source $file; done

到目前为止,这个解决方案是我发现的最具代表性的解决方案:

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




scripting