Назад | Перейти на главную страницу

экспортированная переменная не сохраняется после выполнения скрипта

У меня странная проблема. У меня есть виртуальная машина с Solaris 11, и я пытаюсь написать несколько сценариев bash.

если в оболочке я набираю:

export TEST=aaa

а затем запустить:

set

Я правильно вижу новую переменную среды с именем TEST, значение которой равно aaa. Если, однако, я делаю то же самое в скрипте. когда сценарий завершается, я не вижу набора переменных. Для конкретного примера, если в файле test.sh у меня есть:

#!/usr/bin/bash
echo 1: $TEST   #variable not defined yet, expect to print only 1:
echo 2: $USER
TEST=sss
echo 3:  $TEST
export TEST
echo 4:  $TEST

он печатает:

1:
2: daniele
3: sss
4: sss

и после его выполнения TEST не устанавливается в оболочке. Я что-то упускаю? Я пробовал как экспортировать TEST = sss, так и отдельный набор / экспорт переменных без разницы.

экспорт - сделать переменную доступной для дочерних процессов, но не для родительских.

источник - запустить скрипт в оболочке без создания дочернего процесса

Для exalmpe постоянная переменная может быть реализована путем записи в файл

#!/usr/bin/bash
echo 1: $TEST   #variable not defined yet, expect to print only 1:
CONFIGFILE=~/test-persistent.vars
if [ -r ${CONFIGFILE} ]; then
  # Read the configfile if it's existing and readable
  source ${CONFIGFILE}
fi
echo 2: $TEST
echo 3: $USER
TEST=sss
echo 4:  $TEST
echo TEST="$TEST"> ${CONFIGFILE}
echo 5:  $TEST

Чтобы переменные были видны, вам необходимо source скрипт, который экспортирует ваши переменные. Видеть man source.