В чем разница между переменными оболочки и среды? Где хранятся эти переменные?
Разница между переменными оболочки и среды
Ответ 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