Я использую Red Hat Linux Enterprise 5; Я всегда использую команду экспорта для установки переменных среды.
Существуют ли другие способы установки переменных среды и каковы их преимущества / недостатки?
Я использую Red Hat Linux Enterprise 5; Я всегда использую команду экспорта для установки переменных среды.
Существуют ли другие способы установки переменных среды и каковы их преимущества / недостатки?
Это выдержка из страницы руководства Bash:
export [-fn] [name [= word]] ...
export -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 ( echo "parent..."
) вы видите «123» и «456», потому что оба var1
и var2
активны в текущей среде. Вы не видите значение для, var3
потому что оно еще не установлено.
После строки, которая начинается " var3=...
", вы не видите значение, var1
потому что оно не было экспортировано. Вы делаете видите значение , var2
поскольку она была экспортирована. Вы видите значение , var3
потому что он был установлен для ребенка среды только .
( bash -c
эквивалентно запуску сценария с содержимым аргумента для -c
опции. Сценарий или другой исполняемый файл или, в этом случае, аргумент для bash -c
становится дочерним элементом текущей среды, который, в результате, конечно, является дочерним родитель) .
В «скрипте» значения переменной изменены. Теперь он выводит эти новые значения.
Как только «скрипт» завершен, выполнение возвращается в родительскую среду (в данном случае это командная строка). После последнего эха вы видите исходные значения, потому что изменения, сделанные в дочерней среде, не влияют на родительскую.
export
- сделать переменные доступными для этих дочерних сред.Вы говорите, что
По тому, как вы это сформулировали, звучит так, будто вы действительно пытаетесь спросить, как сохранить переменную среды. Для этого вам потребуется поместить свое
export VAR="foo"
заявление в ваш файл $ HOME / .bash_profile (если вы используете bash). Если вы хотите, чтобы эта переменная среды сохранялась для всех пользователей, кроме root, добавьте ее в / etc / profile. Если вы хотите добавить его и для пользователя root, установите его в /root/.bash_profile.Это будет работать для всех оболочек входа в систему, где bash является предпочтительной оболочкой. Для не входящих в систему оболочек вам необходимо использовать .bashrc. У меня нет идей, чтобы предложить для других оболочек: D
источник
экспорт - самый простой способ сделать это, так почему бы не оставить это в покое?
источник
FOO=BAR; executethisprogram
программаexecutethisprogram
НЕ БУДЕТ знать значение переменнойFOO
. С другой стороны, при использовании:FOO=BAR; export FOO; executethisprogram
Программаexecutethisprogram
узнает значение переменнойFOO
.export FOO
это команда, которая помечает переменнуюFOO
так, чтобы к ней могли обращаться дочерние процессы среды, в которой была выполнена команда. Этот родитель может быть скриптом или интерактивной оболочкой.Вы также можете сделать что-то вроде этого:
Например:
вывод на английском.
вывод на польском языке (если есть).
В прошлом в sh вы не могли сделать экспорт VAL = val. Ты должен
источник
ls
например), не влияя на значение этой переменной в текущей (родительской) среде.ls
является потомком процесса, из которого он был запущен. Если я печатаюls
в командной строке, интерактивная оболочка является родительской иls
дочерней. Если у меня есть сценарий, который использует,ls
то сценарий является родительским иls
дочерним.