У меня есть 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