Переменная среды


Переменная среды — это значение с динамическим именем , которое может влиять на поведение запущенных процессов на компьютере. Они являются частью среды, в которой выполняется процесс. Например, запущенный процесс может запросить значение переменной среды TEMP, чтобы найти подходящее место для хранения временных файлов , или переменную HOME или USERPROFILE, чтобы найти структуру каталогов, принадлежащую пользователю, запускающему процесс.

В современном виде они были представлены в 1979 году в версии 7 Unix , поэтому с этого момента они включены во все разновидности и варианты операционных систем Unix , включая Linux и macOS . Начиная с PC DOS 2.0 в 1982 году, все последующие операционные системы Microsoft , включая Microsoft Windows и OS/2 , также включали их в качестве функции, хотя и с несколько другим синтаксисом, использованием и стандартными именами переменных.

Во всех Unix и Unix-подобных системах, а также в Windows каждый процесс имеет свой отдельный набор переменных окружения . По умолчанию при создании процесса он наследует дублирующую среду выполнения своего родительского процесса, за исключением явных изменений, внесенных родителем при создании дочернего процесса. На уровне API эти изменения должны выполняться между запуском forkи exec. В качестве альтернативы, из командных оболочек , таких как bash , пользователь может изменить переменные среды для конкретного вызова команды, косвенно вызывая ее через envили используяENVIRONMENT_VARIABLE=VALUE <command>обозначение. Работающая программа может получить доступ к значениям переменных среды для целей настройки.

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

В Unix переменная среды, измененная в сценарии или скомпилированной программе, повлияет только на этот процесс и, возможно, на дочерние процессы. Родительский процесс и любые несвязанные процессы не будут затронуты. Точно так же изменение или удаление значения переменной в пакетном файле DOS изменит переменную на время COMMAND.COMсуществования .

В Unix переменные среды обычно инициализируются во время запуска системы сценариями запуска системы и, следовательно, наследуются всеми другими процессами в системе. Пользователи могут, и часто это делают, расширять их в сценарии профиля для командной оболочки, которую они используют. В Microsoft Windows значение по умолчанию для каждой переменной среды хранится в реестре Windows или задается в файле.AUTOEXEC.BAT