Ответы:
Когда вы выполняете программу, дочерняя программа наследует свои переменные окружения от родителя. Например, если в родительском элементе $HOME
задано /root
значение, то для дочерней $HOME
переменной также устанавливается значение /root
.
Это относится только к переменной среды, помеченной для экспорта. Если вы установите переменную в командной строке, как
$ FOO="bar"
Эта переменная не будет видна в дочерних процессах. Нет, если вы не экспортируете его:
$ export FOO
Вы можете объединить эти два утверждения в одно в bash (но не в старой школе):
$ export FOO="bar"
Вот быстрый пример, показывающий разницу между экспортированными и неэкспортированными переменными. Чтобы понять, что происходит, нужно знать, что sh -c
создает дочерний процесс оболочки, который наследует среду родительской оболочки.
$ FOO=bar
$ sh -c 'echo $FOO'
$ export FOO
$ sh -c 'echo $FOO'
bar
Примечание. Для получения справки по встроенным командам оболочки используйте help export
. Встроенные модули оболочки - это команды, которые являются частью вашей оболочки, а не независимыми исполняемыми файлами, такими как /bin/ls
.
Юникс
Команды env, set и printenv отображают все переменные окружения и их значения. env и set также используются для установки переменных среды и часто включаются непосредственно в оболочку. Кроме того, printenv можно использовать для печати одной переменной, указав ее имя в качестве единственного аргумента команды.
В Unix также могут использоваться следующие команды, но они часто зависят от определенной оболочки.
export VARIABLE=value # for Bourne, bash, and related shells
setenv VARIABLE value # for csh and related shells
Вы можете посмотреть на это на
VARIABLE=value; export VARIABLE
вместо назначения и экспорта сразу. Команда set
в C Shell предназначена для переменных оболочки, а не переменных среды; setenv
является аналогом export
. Команда set
в оболочках, полученных из Bourne, печатает все переменные, а не только экспортируемые переменные (окружения). Исторически, по крайней мере, env
команда отделена от оболочки (не является встроенной), хотя ее можно легко превратить во встроенную. Он устанавливает среду для конкретной команды, а не оболочку, которая ее запускает.
export
является встроенной командой bash
оболочки и других вариантов оболочки Bourne . Он используется для маркировки переменной оболочки для экспорта в дочерние процессы.