Экспортировать переменные, определенные в другом файле

У меня есть script, который содержит пару переменных, которые должны быть установлены как переменная среды

Список переменных постоянно меняется, а его модификация на моем конце не является вариантом. Любая идея, как я буду заниматься этим?

образец файла foo.sh

FOO="FOOFOO"
BAR="BARBAR"

Ответ 1

Существует разница между переменной и переменной окружения. Если вы выполняете . foo.sh и foo.sh содержит строку FOO=value, тогда переменная FOO будет назначена в текущем процессе. Это не переменная среды. Чтобы стать переменной окружения (и, следовательно, быть доступной для суб-оболочек), она должна быть экспортирована. Тем не менее, оболочки предоставляют опцию, которая делает все назначения переменных способствующими переменной переменной окружения, поэтому если вы просто выполните:

set -a
. foo.sh
set +a

тогда все назначения переменных в foo.sh будут сделаны переменными среды в текущем процессе. Обратите внимание, что это не совсем так: в bash экспорт переменной делает ее переменной environement в текущей оболочке, но в других оболочках (например, тире) экспорт этой переменной не делает ее переменной среды в текущей оболочке, (Однако это заставляет его устанавливать его в среде подоболочек.)

Ответ 2

Вы ищете '.' command (также пишется "источник" в bash):

source foo.sh

Так как вам нужно экспортировать их в среду, вам может потребоваться немного дополнительная работа:

while read -r line; do
    export "$line"
done < foo.sh

Ответ 3

Если вы хотите экспортировать только переменные с общим префиксом, например:

BAZ_FOO="FOOFOO"
BAZ_BAR="BARBAR"

Вы могли бы просто сделать это:

. foo.sh
variable_list=()
variable_list=( $(set -o posix ; set  |\
                  grep "BAZ_"         |\
                  cut -d= -f1) )
for variable in "${variable_list[@]}"
do
  export "$variable"
done