2014-01-19 20 views
0

В чем разница между переменными экспортируемой среды и переменными среды?Экспортированные переменные среды vs Переменные среды

я должен ответить на вопрос: «Как мы можем отобразить все переменные окружения, которые были определены в терминале?»

Сначала я думал, что это был «printenv», но потом опять сказал «DEFINED в Терминале» и Я думал, что это означает экспортированные переменные среды, которые я прочитал, они отображаются с помощью «env».

Я немного смущен.

ответ

1

export - это команда, которая создает переменную окружения. Фраза «экспортированная переменная среды» избыточна.

В оболочке могут быть переменные среды, которые не были созданы командой export, поскольку каждая программа запускается с помощью среды, переданной вызывающей программой, через системный вызов execve, поэтому, я думаю, вы можете сказать, что есть некоторая среда переменные, которые никогда не были «экспортированы».

Но это глупое различие. Оболочка не отслеживает историческое происхождение переменных среды. Вы ничего не можете сделать, чтобы сообщить, какие из них были «определены в терминале». Он не знает. (history | grep export? Ugh ...)

В ответ на ответ Чарльза Гудвина в unix нет «постоянных» переменных окружения. Иллюзию постоянной переменной можно создать, поместив определение в файл запуска оболочки (/etc/profile, $HOME/.profile и т. Д.), Но это определение будет командой export, неотличимой от команды export, которую вы запускаете вручную.

В некоторых системах существует файл /etc/environment, который создает еще более мощную иллюзию набора «общих, постоянных» переменных окружения, но на самом деле они не являются ни тем, ни другим. Он не содержит ключевое слово export, потому что он не анализируется оболочкой - PAM обрабатывает его перед запуском оболочки. Это тот же принцип, что и /etc/profile - файл должен быть прочитан в среду вашего первоначального процесса каждый раз, когда вы входите в систему. Вы можете видеть, что значения не разделяются, попробовав эксперимент «изменить и проверить другой процесс» на переменной который пришел из/etc/environment или даже изменил файл /etc/environment и проверить влияние на уже существующие процессы - их не будет.

Окружающая среда более точно можно назвать «наследственными переменными» - информация передает только один путь через них, от родителя к ребенку. Слишком поздно менять терминологию.

0

Может меняться между ОС, но я понимаю, что экспортируемые переменные предназначены только для этого сеанса (т. Е. Открыть терминал, экспортировать переменную среды, открыть другой терминал, а экспортированный env не установлен на новом терминале), тогда как переменные среды (между сеансами, перезагрузками и т. д.).

С точки зрения того, как различные типы env применяются к приложениям, я не знал о них (за исключением, очевидно, если вы хотите, чтобы экспортированное env было применено, вам нужно экспортировать его перед запуском приложения).

Смежные вопросы