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

Переменная среды́ (англ. environment variable) — текстовая переменная операционной системы, хранящая какую-либо информацию — например, данные о настройках системы.

Переменные среды UNIX

Переменные среды устанавливаются пользователем или сценариями оболочки. Начальный набор переменных задаётся стартовыми сценариями операционной системы и сценариями, запускаемыми при регистрации пользователя в системе, в частности, /etc/profile и ~/.bash_profile.

Среда имеет большое значение в UNIX-системах, так как хранит множество настроек как системы в целом, так и отдельных программ. Важной особенностью является то, что при создании дочерний процесс получает локальную копию среды родительского процесса, а, значит, не может изменить напрямую глобальные установки.

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

В сценариях обычно используются объявления вида ИМЯ_ПЕРЕМЕННОЙ="значение переменной", но конкретный синтаксис зависит от используемого интерпретатора.

Для получения значения переменной необходимо перед её именем поставить символ доллара. Также иногда требуется заключить имя в скобки (например, в сценариях утилиты make).

Из командной строки управление переменными осуществляется с помощью export и env.

Переменные среды Windows

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

Классификация

Переменные среды Windows делятся на две категории:

  • Переменные среды пользователя — содержат настройки конкретного пользователя, например, указывают путь до пользовательских каталогов.
  • Системные переменные — хранят данные о некоторых каталогах операционной системы и конфигурации компьютера.

Синтаксис

Обращение к некоторой переменной среды возможно таким образом: %ИМЯ_ПЕРЕМЕННОЙ%. Также возможно выделение из переменной её части (если на компьютере не отключены расширения командного процессора, по умолчанию они включены), например, печать различных частей переменной VAR с использованием командной строки Windows:

  • Вывод содержимого переменной — echo %VAR%.
  • Вывод первых четырёх символов — echo %VAR:~0,4%.
  • Вывод символов с третьего по шестой — echo %VAR:~2,4%
  • Вывод последних четырёх символов — echo %VAR:~-4%

Некоторые переменные среды

Список установленных переменных среды Windows можно узнать, набрав в командной строке: set или нажав кнопку «Переменные среды» на вкладке «Дополнительно» в диалоговом окне «Свойства системы» («Мой компьютер»→"Свойства").

Имя Назначение Пример значения
%ALLUSERSPROFILE% Указывает путь до папки общих документов и настроек, общих для всех пользователей. C:\ProgramData\
%APPDATA% Указывает путь до папки, в которой хранятся настройки некоторых программ текущего пользователя. C:\Documents And Settings\Администратор\Application Data
%CLIENTNAME% Переменная определена только в среде удаленного подключения к рабочему столу. Хранит имя компьютера (%COMPUTERNAME%) клиента удаленного доступа. MyPC
%COMMONPROGRAMFILES% Указывает путь до папки, в которой хранятся общие для установленных программ файлы. C:\Program Files\Common Files
%COMPUTERNAME% Хранит имя компьютера в локальной сети. Начальник
%COMSPEC% Хранит путь до текущего командного интерпретатора Windows. C:\Windows\System32\cmd.exe
%HOMEDRIVE%, %SYSTEMDRIVE% Хранит имя системного диска. C:
%HOMEPATH%, %USERPROFILE% Хранит путь до домашней папки пользователя C:\Documents And Settings\Администратор
%WINDIR% Хранит путь до папки, в которую установлена Windows C:\Windows
%SYSTEMROOT% Хранит путь до системной папки (где хранится ядро и т. п.) C:\Windows
%PROGRAMFILES% Хранит путь до папки с установленными приложениями C:\Program Files
%SESSIONNAME% Хранит имя пользовательского сеанса. В локальном сеансе имеет значение Console, в среде удаленного подключения к рабочему столу протоколом TCP/IP имеет вид RDP-Tcp#<номер сеанса>. Console, RDP-Tcp#1

Список переменных

В современных ОС компании Microsoft на платформе NT для получения информации о системе используются следующие переменные[1] (полужирным выделен текст, относящийся к версиям ОС Windows начиная с Vista (Vista/7/8/8.1/10)):

НазваниеТипОписание
ALLUSERSPROFILEлокальнаяВозвращает размещение профиля «All Users». В Windows 7 возвращает путь к папке C:\ProgramData\.
APPDATAсистемнаяВозвращает используемое по умолчанию размещение данных приложений. В Windows XP это C:\Documents and Settings\%UserName%\Application Data. В Windows 7 - C:\Users\%UserName%\AppData\Roaming.
CDлокальнаяУказывает путь к текущему каталогу. Идентична команде CD без аргументов.
CLIENTNAMEлокальная динамическаяПеременная определена только в среде удаленного подключения к рабочему столу. Хранит имя компьютера (%COMPUTERNAME%) клиента удаленного доступа.
CMDCMDLINEлокальнаяТочная команда, использованная для запуска текущего cmd.exe.
CMDEXTVERSIONсистемнаяВерсия текущего Command Processor Extensions.
COMMONPROGRAMFILESсистемнаяРасположение каталога "Common Files" (обычно %ProgramFiles%\Common Files).
COMMONPROGRAMFILES(x86)системнаяРасположение каталога "Common Files" в Program Files (x86) для 64-разрядной ОС (обычно %ProgramFiles(x86)%\Common Files).
COMPUTERNAMEсистемнаяИмя компьютера
COMSPECсистемнаяПуть к исполняемому файлу командного процессора (shell).
DATEсистемнаяВозвращает текущую дату. Использует тот же формат, что и команда date /t. Создаётся командой Cmd.exe.
ERRORLEVELсистемнаяВозвращает код ошибки последней использовавшейся команды. Значение, не равное нулю, обычно указывает на наличие ошибки.
HOMEDRIVEсистемнаяВозвращает имя диска локальной рабочей станции, связанного с основным каталогом пользователя. Задаётся на основании расположения основного каталога. Основной каталог пользователя указывается в оснастке «Локальные пользователи и группы».
HOMEPATHсистемнаяВозвращает полный путь к основному каталогу пользователя. Задаётся на основании расположения основного каталога. Основной каталог пользователя указывается в оснастке «Локальные пользователи и группы».
HOMESHAREсистемнаяВозвращает сетевой путь к общему основному каталогу пользователя. Задаётся на основании расположения основного каталога. Основной каталог пользователя указывается в оснастке «Локальные пользователи и группы».
LOCALAPPDATAсистемнаяВозвращает используемое по умолчанию локальное размещение данных приложений (C:\Users\%UserName%\AppData\Local).
LOGONSERVERлокальнаяИмя контроллера домена, использовавшегося для авторизации текущего пользователя.
NUMBER_OF_PROCESSORSсистемнаяКоличество процессоров в системе (фактически, количество ядер).
OSсистемнаяНазвание операционной системы. Windows XP и Windows 2000 отображаются как Windows_NT.
PATHсистемнаяУказывает путь поиска исполняемых файлов.
PATHEXTсистемнаяВозвращает список расширений файлов, которые рассматриваются операционной системой как исполняемые.
PROCESSOR_ARCHITECTUREсистемнаяАрхитектура процессора. Возможные варианты: x86, IA64, AMD64.
PROCESSOR_IDENTIFIERсистемнаяОписание процессора (в Интернете часто встречается ошибочное написание PROCESSOR_IDENTFIER - пропущена буква).
PROCESSOR_LEVELсистемнаяНомер модели процессора.
PROCESSOR_REVISIONсистемнаяРевизия процессора.
PROGRAMDATAсистемнаяВозвращает путь к каталогу C:\ProgramData\ (аналогично ALLUSERSPROFILE).
PROGRAMFILESсистемнаяПуть к каталогу Program Files.
PROGRAMFILES(x86)системнаяПуть к каталогу Program Files (x86) в 64-разрядных системах для приложений архитектуры x86.
PROMPTлокальнаяВозвращает параметры командной строки для текущего интерпретатора. Создаётся командой Cmd.exe.
PUBLICсистемнаяВ Windows 7 возвращает путь к каталогу C:\Users\Public.
RANDOMсистемнаяСлучайное десятичное число от 0 до 32767. Генерируется Cmd.exe.
SAFEBOOT_OPTION системная Существует только в Безопасном режиме. Принимает значение типа безопасного режима в котором работает система. В Безопасном режиме и Безопасном режиме с поддержкой командной строки принимает значение MINIMAL. В Безопасном режиме с поддержкой сетевых драйверов принимает значение Network.
SESSIONNAMEлокальнаяХранит имя активного пользовательского сеанса. При локальном входе имеет значение "Console", при удаленном доступе имеет вид RDP-Tcp#<номер сеанса>
SYSTEMDRIVEсистемнаяДиск, на котором расположен корневой каталог Windows.
SYSTEMROOTсистемнаяПуть к корневому каталогу Windows.
TEMP и TMPсистемная и локальнаяВозвращает временные каталоги, по умолчанию используемые приложениями, которые доступны пользователям, выполнившим вход в систему. Некоторые приложения требуют переменную TEMP, другие — переменную TMP. Потенциально TEMP и TMP могут указывать на разные каталоги, но обычно совпадают.
TIMEсистемнаяВозвращает текущее время. Использует тот же формат, что и команда time /t. Создаётся командой Cmd.exe. Дополнительные сведения о команде time см. в разделе Time.
USERDOMAINлокальнаяИмя домена, которому принадлежит текущий пользователь.
USERNAMEлокальнаяИмя текущего пользователя.
USERPROFILEлокальнаяПуть к профилю текущего пользователя.
WINDIRсистемнаяКаталог, в котором установлена Windows.

Работа с переменными

Чтобы получить доступ к значению переменной, необходимо поставить знак % перед её названием и после него, например:

echo %PROCESSOR_ARCHITECTURE%

Чтобы установить значение переменной:

SET TEMP=C:\TEMP

Кроме того, с переменными среды можно работать, нажав кнопку «Переменные среды» на вкладке «Дополнительно» в диалоговом окне «Свойства системы» (контекстное меню значка «Мой компьютер» → пункт «Свойства»).

Также необходимо помнить, что, в отличие от UNIX-систем, в DOS и в стандартной командной строке Windows переменные среды не наследуются запускаемыми процессами, а используются совместно. Это позволяет, например, возвращать через них результаты работы программ, но, с другой стороны, создаёт возможность порчи или переполнения. Особенно актуально переполнение для переменной PATH, поскольку она часто дополняется при работе различных скриптов. При возникновении такого переполнения достаточно просто перезапустить интерпретатор командной строки. Интерпретаторы, портированные из UNIX-систем (например, Z-shell), такой проблеме не подвержены.

Получить значение переменной в программном коде можно с помощью метода ExpandEnvironmentStrings COM-объекта WScript.Shell:

WScriptShell = ObjCreate("WScript.Shell")
UserName = WScriptShell.ExpandEnvironmentStrings("%USERNAME%")

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

Значения переменных среды LOGONSERVER, CLIENTNAME, SESSIONNAME, APPDATA, HOMEDRIVE, HOMEPATH устанавливаются при открытии сеанса на основании значений в ветке реестра [HKEY_CURRENT_USER\Volatile Environment].

Значения глобальных переменных среды типа PATH, TEMP и пр. хранятся в ветке реестра [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment].

Трудности перевода

Очень часто встречается неправильное понимание слова «среда» в словосочетании «Переменные среды». Непонимание возникает из-за прочтения слова «среды» с неправильным ударением на первый слог, что приводит к распознаванию этого слова как формы именительного падежа множественного числа слова «среда» (окружение). Правильным является понимание слова «среды́» как формы родительного падежа единственного числа слова «среда» и произношение с ударением на второй слог.

Таким образом, неправильно говорить, например, «с переменными сре́дами» («с переменными окружениями»), а правильно — «с переменными среды́» («с переменными окружения»).

Примечания

  1. Environment Variables (Windows). msdn.microsoft.com. Дата обращения: 29 июня 2018.
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.