Подтвердить что ты не робот

Разница между переменными оболочки и среды

В чем разница между переменными оболочки и среды? Где хранятся эти переменные?

4b9b3361

Ответ 1

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

Стандартные переменные UNIX разделяются на две категории, переменные среды и переменные оболочки. В широком смысле, переменные оболочки применяются только к текущий экземпляр оболочки и используется для установления краткосрочной работы условия; переменные среды все большее значение, и те, которые установлены при входе в систему, действительны для продолжительность сеанса. От конвенции, переменные среды имеют ВЕРХНИЙ СЛУЧАЙ и переменные оболочки имеют имена нижних регистров.

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

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

HOME=/home/adam

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

PWD=/tmp

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

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

Ответ 2

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

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

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

Ответ 3

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

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

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

$ SHELL_VAR=xyz
$ firefox

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

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

$ export SHELL_VAR=xyz
$ firefox

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

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

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


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

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

export SHELL_VAR=xyz

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

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

Ответ 4

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