Ответ 1
Не было бы
for f in ~/.bash_profile_*; do source $f; done
достаточно?
Изменить: дополнительный слой ls ~/.bash_*
упрощен для прямого bash globbing.
Мне нужно разрешить нескольким приложениям добавлять системную переменную ($ PYTHONPATH в этом случае). Я думаю о назначении каталога, в котором каждое приложение может добавить модуль (например,.bash_profile_modulename). Пробовал что-то подобное в ~/.bash_profile:
find /home/mike/ -name ".bash_profile_*" | while read FILE; do
source "$FILE"
done;
но он не работает.
Не было бы
for f in ~/.bash_profile_*; do source $f; done
достаточно?
Изменить: дополнительный слой ls ~/.bash_*
упрощен для прямого bash globbing.
Я согласен с Деннисом выше; ваше решение должно работать (хотя точка с запятой после "done" не нужна). Однако вы также можете использовать цикл for
for f in /path/to/dir*; do
. $f
done
Подстановка команды ls необязательна, как в ответе Дирка. Это механизм, используемый, например, в /etc/bash_completion
для источника других сценариев завершения bash в /etc/bash_completion.d
Oneliner (только для bash/zsh):
source <(cat *)
aus man bash:
исходное имя файла [аргументы]
ein source config/*
Первый аргумент будет получен и все остальные файлы в config/будут аргументами для script его источников.
for file in "$(find . -maxdepth 1 -name '*.sh' -print -quit)"; do source $file; done
Это решение является наиболее доступным, которое я когда-либо обнаружил: * Это не дает никакой ошибки, если нет файлов, соответствующих * работает с несколькими оболочками, включая bash, zsh * кросс-платформа (Linux, MacOS,...)
str="$(find . -type f -name '*.sh' -print)"
arr=( $str )
for f in "${arr[@]}"; do
[[ -f $f ]] && . $f --source-only || echo "$f not found"
done
Я тестировал, и я использую его. Просто модифицируйте. после поиска, чтобы указать на вашу папку с вашими сценариями, и она будет работать.
ok, так что я закончил делать;
eval "$(find perf-tests/ -type f -iname "*.test" | while read af; do echo "source $af"; done)"
это будет выполнять источник в текущей оболочке и maintian все переменные...
Я думаю, вы должны просто быть в состоянии сделать
source ~/.bash_profile_*