Bash: экспортированная переменная не загружена в скрипт sh - PullRequest
0 голосов
/ 21 января 2019

У меня есть следующий скрипт test.sh:

#!/bin/sh
echo "MY_VARIABLE=$MY_VARIABLE"

Что ж, если я выполню следующее:

export MY_VARIABLE=SOMEVALUE
/bin/bash test.sh

, он напечатает:

MY_VARIABLE=

Почему MY_VARIABLE не читается в скрипте test.sh?

Вы можете воспроизвести контекст здесь , используя следующий скрипт:

touch test.sh
chmod a+x test.sh
echo "#!/bin/sh" >> test.sh
echo "echo "MY_VARIABLE=$MY_VARIABLE"" >> test.sh
export MY_VARIABLE=something
/bin/bash test.sh

Ответы [ 2 ]

0 голосов
/ 21 января 2019

В вашем скрипте для создания контекста строка

echo "echo "MY_VARIABLE=$MY_VARIABLE"" >> test.sh

создает следующую строку в test.sh:

echo MY_VARIABLE=

, если MY_VARIABLE ранее не было установлено.Расширение $MY_VARIABLE выполняется в оболочке, которая подготавливает ваш контекст.

Если вы используете одинарные кавычки

echo 'echo "MY_VARIABLE=$MY_VARIABLE"' >> test.sh

, скрипт test.sh содержит правильную строку

echo "MY_VARIABLE=$MY_VARIABLE"

и печатает MY_VARIABLE=something как положено.

0 голосов
/ 21 января 2019

Все работает хорошо, но если вы хотите, чтобы ваш родительский процесс обновлял среду, вы должны source свой сценарий:

source test.sh

В противном случае изменения будут действовать только во время выполнения вашего сценария.

Вы можете рассматривать это так же, как поиск файла ~/.bashrc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...