Разница между оболочкой и переменными среды - PullRequest
24 голосов
/ 27 июля 2010

Чем отличаются переменные оболочки и среды? Где хранятся эти переменные?

Ответы [ 4 ]

21 голосов
/ 27 июля 2010

Цитирование этот источник ,

Стандартные переменные UNIX разделены на две категории: переменные среды и переменные оболочки.В общих чертах, переменные оболочки применяются только к текущему экземпляру оболочки и используются для задания краткосрочных условий работы;Переменные среды имеют большее значение, и значения, установленные при входе в систему, действительны в течение всего сеанса.По соглашению, переменные окружения имеют UPPER CASE, а переменные оболочки имеют строчные имена.

Чтобы получить список всех переменных среды, используйте printenv, а для списка всех переменных оболочки - set.

Вы заметите, что переменные среды хранят более постоянное значение, например:

HOME=/home/adam

, которое изменяется довольно редко, в то время как переменные оболочки хранят локальные, временные, специфичные для оболочки значения, например:

PWD=/tmp

, который изменяется каждый раз, когда вы меняете текущий каталог.

Для большинства практических задач установите значения среды, добавив export VARIABLE_NAME=VALUE в файл ~ / .bashrc.

9 голосов
/ 25 декабря 2012

Их различие аналогично разнице между закрытыми полями и защищенными полями в классе Java.

Закрытые поля класса Java доступны только из этого класса Java.Защищенные поля Java-класса доступны как из этого Java-класса, так и из его подклассов.

Переменные оболочки оболочки доступны только из этого процесса оболочки.Переменные среды, экспортируемые из этой оболочки, доступны как из этого процесса оболочки, так и из подпроцессов, созданных из этой оболочки.

4 голосов
/ 03 июня 2017

Для оболочки Bash:

Переменные оболочки по-разному отличаются от переменных среды:

♦ Переменная оболочки специфична для самой оболочки и не наследуется дочерними процессами. Например, допустим, вы запускаете другое приложение из оболочки, которое не будет наследовать переменную оболочки:

$ SHELL_VAR=xyz
$ firefox

SHELL_VAR не будет доступно в среде дочернего процесса (firefox).

♦ Напротив, переменные окружения родительского процесса (здесь оболочка) наследуются всеми дочерними процессами:

$ export SHELL_VAR=xyz
$ firefox

♦ Переменные оболочки и среды являются локальными для оболочки / процесса, которые их определили:

Переменные среды могут быть постоянными , тогда как для переменных оболочки после выхода из сеанса все они исчезают.

Примечание: приведенные выше примеры только изменяют оболочку, над которой вы работаете, другими словами, если вы выходите из системы или запускаете новую оболочку / терминал, вы не увидите переменные, которые вы определили, это в соответствии с принцип локальности процесса.


Как создать постоянные переменные оболочки:

Один из способов сделать это - изменить файл ~ / .profile :

export SHELL_VAR=xyz

Этот параметр зависит от пользователя и не распространяется на всю систему. Для системных переменных среды вы можете добавить указанную выше строку в файл .sh в / etc / profile.d

Я настоятельно рекомендую прочитать эту страницу: EnvironmentVariables

0 голосов
/ 27 июля 2010

Переменная оболочки - это особый случай переменной среды.Переменные оболочки наследуются от среды и, возможно, копируются в среду дочерних элементов оболочки в зависимости от используемого синтаксиса: http://www.pixelbeat.org/docs/env.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...