У меня странная проблема. У меня есть виртуальная машина с 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
.