Установка переменных среды Linux

Я выполняю Red Hat Linux Enterprise 5; я всегда использую команду экспорта для установки переменных среды.

Там какие-либо другие пути состоят в том, чтобы установить переменные среды и каковы преимущества/недостатки их?

9
задан 17.09.2016, 02:38

4 ответа

Это - выборка из страницы справочника Bash:

экспорт [-fn] [имя [=word]]...
экспорт-p
Предоставленные имена отмечены для автоматического экспорта в среду впоследствии выполняемых команд. Если-f опция дана, имена относятся к функциям...

Если Вам только нужна переменная в текущей среде, не необходимо использовать экспорт.

var=value

Править:

Без экспорта: текущая среда только. С экспортом: текущая среда и дочерние среды.

Вот демонстрация влияния экспорта на доступности переменной в дочерней среде, и это изменяется в дочерней среде, не влияют на родителя:

$ var1=123
$ export var2=456
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []
$ var3=789 bash -c 'echo "child [$var1] [$var2] [$var3]"; var1=111; var2=222; var3=333; echo "child [$var1] [$var2] [$var3]"'
child [] [456] [789]
child [111] [222] [333]
$ echo "parent [$var1] [$var2] [$var3]"
parent [123] [456] []

После первого эха (echo "parent...") Вы видите "123" и "456" потому что оба var1 и var2 активны в текущей среде. Вы не видите значение для var3 потому что это еще не установлено.

После строки, которая запускается"var3=..."Вы не видите значение для var1 потому что это не экспортировалось. Вы действительно видите значение для var2 потому что это экспортировалось. Вы видите значение для var3 потому что это было установлено для дочерней среды только.

(bash -c эквивалентно запущению скрипта с содержанием аргумента -c опция. Сценарий или другой исполняемый файл или, в этом случае, аргумент bash -c становится ребенком текущей среды, которая, в результате, конечно, родитель ребенка.)

В "сценарии" изменяются значения переменной. Это теперь производит те новые значения.

После того как "сценарий" закончен, выполнение возвращается к родительской среде (командная строка в этом случае). После последнего эха Вы видите исходные значения, потому что изменения, внесенные в дочерней среде, не влияют на родителя.

16
ответ дан 07.12.2019, 13:11

Вы говорите это

Я всегда использую команду экспорта для установки переменной среды

По тому, как Вы сформулировали это, это кажется, что Вы действительно пытаетесь спросить, как Вы делаете переменную окружения, сохраняется. Сделать, который потребовал бы, чтобы Вы поместили Ваш export VAR="foo" оператор в Вашем файле $HOME/.bash_profile (если Вы используете удар). Если Вы хотите, чтобы та переменная окружения сохранилась для всех пользователей, но корня, то добавьте его к/etc/profile. Если Вы хотите добавленный для пользователя root также, то установленный это в/root/.bash_profile.

Это будет работать на все оболочки входа в систему, где удар является предпочтительной оболочкой. Для не входят в оболочки, необходимо использовать .bashrc. У меня нет понимания для предложения для других оболочек :D

3
ответ дан 07.12.2019, 13:11

экспорт является самым простым способом сделать это, итак, почему бы не оставить его в этом?

export VARIABLE=value    # for Bourne, bash, and similar shells
setenv VARIABLE value    # for csh and similar shells
1
ответ дан 07.12.2019, 13:11

Можно также сделать что-то вроде этого:

VAR=val application

Например:

LANG=C ls --help

вывод на английском языке.

LANG=pl_PL ls --help

вывод на польском языке (если доступный).

В прошлом в sh Вы не могли сделать VAL=val экспорта. Вы имели к

VAL=val; export VAL
1
ответ дан 07.12.2019, 13:11

Теги

Похожие вопросы