Ответ 1
При выполнении программы дочерняя программа наследует переменные среды от родителя. Например, если для $HOME
установлено значение /root
в родительском элементе, тогда дочерняя переменная $HOME
также установлена на /root
.
Это относится только к переменной среды, помеченной для экспорта. Если вы установите переменную в командной строке, например
$ FOO="bar"
Эта переменная не будет видна в дочерних процессах. Если вы не экспортируете его:
$ export FOO
Вы можете объединить эти два оператора в один в bash (но не в старой школе sh):
$ export FOO="bar"
Вот краткий пример, показывающий разницу между экспортированными и неэкспортируемыми переменными. Чтобы понять, что происходит, известно, что sh -c
создает процесс дочерней оболочки, который наследует родительскую оболочку.
$ FOO=bar
$ sh -c 'echo $FOO'
$ export FOO
$ sh -c 'echo $FOO'
bar
Примечание.. Чтобы получить справку по встроенным командам оболочки, используйте help export
. Встроенные оболочки - это команды, которые являются частью вашей оболочки, а не независимыми исполняемыми файлами, такими как /bin/ls
.