9

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

Существуют ли другие способы установки переменных среды и каковы их преимущества / недостатки?

4 ответа4

15

Это выдержка из страницы руководства Bash:

экспорт [-fn] [имя [= слово]] ...
экспорт -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 становится дочерним элементом текущей среды, который, в результате, конечно же, является родительским дочерним.)

В "скрипте" значения переменной изменены. Теперь он выводит эти новые значения.

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

3

Вы говорите, что

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

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

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

1

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

export VARIABLE=value    # for Bourne, bash, and similar shells
setenv VARIABLE value    # for csh and similar shells
1

Вы также можете сделать что-то вроде этого:

VAR=val application

Например:

LANG=C ls --help

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

LANG=pl_PL ls --help

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

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

VAL=val; export VAL

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .