329

Вопросы о

  • установка переменных среды
  • PATH

здесь очень распространены, и в большинстве случаев ответы очень похожи друг на друга. В будущем было бы неплохо иметь хороший Q/A для этого.

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

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

4 ответа4

321

Что такое переменные среды?

Переменные среды содержат значения, связанные с текущей средой, такой как операционная система или пользовательские сеансы.

Дорожка

Один из самых известных называется PATH в Windows, Linux и Mac OS X. Он определяет каталоги, в которых исполняемые программы * находятся на компьютере, которые можно запускать, не зная и не вводя полный путь к файлу в команде. линия. (Или в Windows, диалоговое окно « Выполнить » в меню «Пуск» или Выиграть+R).

В Linux и Mac OS X он обычно содержит все каталоги bin и sbin относящиеся к текущему пользователю. В Windows он содержит как минимум каталоги C:\Windows и C:\Windows\system32 - поэтому вы можете запустить calc.exe или notepad.exe из командной строки или из диалогового окна « Выполнить », но не firefox.exe . (Firefox находится в C:\Program Files\Mozilla Firefox . Информацию о том, как включить Firefox, можно найти здесь .)

Например, при вводе calc (можно не указывать .exe ) в командной строке в Windows запускается калькулятор Windows.

* Вы можете добавить поддержку расширений файлов, отличных от .exe , отредактировав %PATHEXT%.

Другой

Другие переменные могут указывать программам, какой тип терминала используется (TERM в Linux/Mac OS X) или в Windows, где находится папка Windows (например, %WINDIR% - это C:\Windows).

Создание новых переменных среды

В Windows, Linux и Unix возможно создание новых переменных среды, значения которых затем становятся доступными для всех программ при запуске.

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

 

Windows

графический интерфейс пользователя

  1. Откройте Control Panel » System » Advanced » Environment Variables .

  2. Введите control sysdm.cpl,,3 в диалоговом окне "Выполнить" (Выиграть+ R) и нажмите Environment Variables .
    Для редактирования пользовательских переменных вы также можете набрать

    %windir%\System32\rundll32.exe sysdm.cpl,EditEnvironmentVariables
    

    в диалоговом окне "Выполнить".

  3. Щелкните правой кнопкой мыши (Мой) компьютер и выберите Свойства или просто нажмите Выиграть+ Перерыв .

    • В XP нажмите Advanced » Environment Variables .
    • В Vista+ нажмите Advanced system settings » Environment Variables .
  4. Есть много других способов добраться до того же места, например, введя "переменные среды" в меню "Пуск" /"Экран поиска" и т.д.

Переменные среды в Windows разделены на значения, специфичные для пользователя и компьютера / системы. Вы можете просматривать и редактировать их значения там. Их текущие значения при запуске становятся доступными для всех программ.

Существует также Rapid Environment Editor, который помогает устанавливать и изменять переменные среды в Windows без необходимости углубляться в системные настройки. Еще одна программа с открытым исходным кодом для Windows, с помощью которой можно легко редактировать среду пути, - это редактор путей.

Командная строка

Формат

Переменные среды в Windows обозначены символом процента (%), окружающим имя:

%name%

эхо

Чтобы отобразить значение переменной среды в cmd.exe , введите echo %name% .

C:\>echo %USERPROFILE%
C:\Users\Daniel

задавать

Чтобы создать / установить переменную, используйте set varname=value:

C:\>set FunnyCatPictures=C:\Users\Daniel\Pictures\Funny Cat Pictures

C:\>set FunnyCatPicturesTwo=%USERPROFILE%\Pictures\Funny Cat Pictures 2

Чтобы добавить / добавить переменную, используйте set varname=value;%varname%:

C:\>set Penguins=C:\Linux

C:\>set Penguins=C:\Windows;%Penguins%

C:\>echo %Penguins%
C:\Windows;C:\Linux

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

Setx

Чтобы создать / установить переменную постоянно, используйте setx varname "value":

C:\>setx FunnyCatPictures "C:\Users\Daniel\Pictures\Funny Cat Pictures"

[Restart CMD]

C:\>echo %FunnyCatPictures%
C:\Users\Daniel\Pictures\Funny Cat Pictures

В отличие от set , знак равенства отсутствует, и значение должно быть заключено в кавычки, если оно содержит пробелы. Обратите внимание, что переменные могут расширяться до строки с пробелами (например, %PATH% становится C:\Program Files), поэтому лучше включать кавычки вокруг значений, которые содержат любые переменные.

Вы должны вручную добавить setx в версии Windows, более ранние, чем Vista.
Средства поддержки Windows XP с пакетом обновления 2 (SP2)

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

Вот список переменных среды по умолчанию, которые встроены в Windows. Вот некоторые примеры:%WINDIR% , %SystemRoot% , %USERPROFILE% и %APPDATA% . Как и большинство имен в Windows, они не чувствительны к регистру.

 

Производные Unix (FreeBSD, GNU / Linux, OS X)

Переменные среды в Linux имеют префикс со знаком доллара ($), такой как $ HOME или $ HOSTNAME. Многие известные и стандартные переменные прописаны заглавными буквами для обозначения именно этого. Имейте в виду, что имена переменных чувствительны к регистру, а это означает, что $ User и $ USER совершенно не связаны с точки зрения оболочки.

Производные Unix определяют общесистемные переменные в сценариях оболочки, расположенных в основном в папке /etc , но пользовательские значения могут быть заданы этим переменным в сценариях, расположенных в домашней папке (например, /etc/profile , $HOME/.bash_profile). Файл .profile в домашней папке является обычным местом для определения пользовательских переменных.

Установка переменных

Эти файлы являются обычными сценариями оболочки и могут содержать не только объявления переменных среды. Чтобы установить переменную среды, используйте export . Чтобы показать свои текущие переменные среды в терминале, запустите env .

Команда export - это стандартный способ определения переменных. Синтаксис очень интуитивно понятен. Результат для этих двух линий идентичен, но первая альтернатива предпочтительнее в случае, если необходима переносимость до предварительной версии POSIX Bourne.

var=value; export var
export var=value

Оболочка C и ее потомки используют совершенно другой синтаксис; там команда setenv .

Посмотрите проект документации Linux, Path HOWTO для более подробного обсуждения этой темы.

Возможно, вопреки распространенному мнению, OS X является более "Unix", чем Linux. В дополнение к уже упомянутым файлам $ PATH можно изменить в следующих файлах:

  • /etc/paths содержит все каталоги по умолчанию, которые добавляются к пути, например /bin и /usr/sbin .
  • Любой файл в /etc/paths.d - обычно используется установщиками, чтобы сделать исполняемые файлы, которые они предоставляют, доступными из оболочки, не затрагивая общесистемные или пользовательские файлы конфигурации. Эти файлы просто содержат один путь на строку. Например, / Программы / Mozilla / Календарь / bin.

 

Внешняя ссылка:

Переменные среды в XP
Средства поддержки Windows XP с пакетом обновления 2 (setx)
Переменные среды в Windows Vista и Windows 7
Добавление исполняемых файлов в диалоговое окно «Выполнить»
Советы по Mac OSX - настройка переменных среды
TLDP: Путь Howto

62

Этот пост с более технической точки зрения, чем у Дэниела, но не объясняет так много концепций.


Статья в Википедии также является отличной ссылкой.

Linux и большинство BSD

В большинстве оболочек командной строки временные переменные среды задаются с помощью команд export (sh, bash, zsh) или setenv (csh, tcsh).

  • Примеры добавления $HOME/bin к $PATH в bash или zsh:

    export PATH="$HOME/bin:$PATH"
    

    (В данном конкретном случае export не требуется, поскольку PATH уже является частью среды.)

  • csh, tcsh:

    setenv PATH "$HOME/bin:$PATH"
    

Постоянные переменные среды могут быть установлены в течение нескольких отдельных этапов:

  • Авторизоваться:

    • Настройка сеанса входа в систему: Linux pam_env , который обычно читает из /etc/environment

    • Вход в терминал: файлы "профиля" оболочки.

      • bash использует /etc/profile и первый из них: ~/.bash_profile , ~/.bash_login , ~/.profile . Ручная страница bash(1) раздел Invocation .

        Часто файл профиля пользователя содержит явный вызов ~/.bashrc .

      • zsh: страница руководства zsh(1) раздел Файлы запуска / выключения .

      • csh и другие оболочки: см. соответствующие страницы руководства.

    • Графический логин: не уверен; может отличаться в зависимости от менеджера входа в систему. GDM в моей системе читает ~/.profile .

  • Открытие окна терминала:

    • bash использует /etc/bash.bashrc и ~/.bashrc .

Серия Windows NT

  • В командной строке (cmd.exe) используйте set name=value чтобы изменить переменные среды для этого окна.

    Чтобы добавить c:\bin к %PATH% , используйте:

    set path=%path%;c:\bin
    

    Это влияет только на этот процесс cmd.exe и любые новые процессы, запущенные из него.

  • Чтобы внести постоянные изменения, используйте Панель управления → Система → Дополнительно → Переменные среды. (документы)

    Примечание. Хотя пользовательские настройки обычно переопределяют системные, PATH обрабатывается специально: и системные, и пользовательские настройки объединяются в окончательное значение.

    Изменения сохраняются в Реестре (см. Ниже) и мгновенно применяются ко всем новым процессам, созданным в Проводнике (графическая оболочка), например, через меню «Пуск».

  • Общесистемные переменные среды хранятся в реестре, HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment и загружаются при загрузке системы.

    Пользовательская среда хранится в HKCU\Environment и загружается при входе пользователя.

  • По умолчанию система также ищет set команды в файле AUTOEXEC.NT .

MS-DOS, 16-битная Windows, серия Windows 9x

  • В приглашении MS-DOS (command.com) используйте set name=value , как в WinNT.

    Точно так же, запуск set интерактивном режиме влияет только на этот экземпляр command.com , а также на любые новые процессы, запущенные из него.

  • Чтобы внести постоянные изменения, добавьте или отредактируйте set строки набора в C:\AUTOEXEC.BAT , затем перезагрузите компьютер.

    • Обходной путь, чтобы избежать перезапуска, для Windows 9x: откройте окно Приглашения MS-DOS, установите соответствующие переменные, закройте существующий процесс Explorer (Пуск → Завершение работы →, удерживая Ctrl+Shift, нажмите Отмена), запустите explorer.exe из MS- Окно DOS Prompt.

VMS

(Не смог устоять.)

DCL не имеет понятия "путь", но в SYS$LOGIN:LOGIN.COM можно поместить различные определения символов и команд.

9

Для bash PATH оболочки глобальной (нетерминал) переменные окружения, я следовать соглашению , используемый в моей установке Ubuntu VM - другие оболочки будет меняться:

Предостережение: вся последовательность запуска оболочки, файлы .bashrc , .profile и т.д., В каком порядке ?, когда мне нужно повторно входить в систему, чтобы получить видимость для вновь определенных переменных, псевдонимов и т.д.? Разница между логином, интерактивной и неинтерактивной оболочкой - я использую cron ?, и почему, когда я делаю a . ~/.bashrc моя тупая PATH растет все длиннее и длиннее? вот ключевые вопросы, которые приходят на ум, когда я думаю о своей PATH .

На самом деле, я просто полностью переписал весь мой набор файлов запуска bash, взяв идеи из файлов скелетов Ubuntu и cygwin, и вот некоторые из моих сайтов:

  1. Экспортируйте PATH и другие глобальные переменные среды (например, LD_LIBRARY_PATH) в .profile ;
  2. Используйте логику в ~/.profile для получения источника $HOME/.bashrc если он существует;
  3. Выполните забор выполнения ~/.bashrc с тестом для интерактивного выполнения, выйдите иначе;
  4. Поместите все псевдонимы, shopt , настройку приглашения, управление историей, настройку терминала, определение функций и т.д. (Интерактивную настройку) в часть ~/.bashrc которая защищена для работы только в интерактивном режиме;
  5. Избавьтесь от других файлов запуска bash, потому что их существование определяет, будет ли путь управления через .profile и .bashrc работать должным образом . То есть, если нет особых требований сделать иначе, удалите ~/.bash_profile & ~/.bash_login ;
  6. Когда я нахожусь в приглашении bash, и мне нужно обновить некоторые настройки по умолчанию, я редактирую свой файл ~/.bashrc , а затем просто отправляю его с помощью . ~/.bashrc чтобы получить эти изменения в моей текущей оболочке.
  7. Когда я изменяю переменную окружения, такую как PATH , мне нужно изменить и получить исходный код ~/.profile ;
  8. Я помещаю свои вызовы в fink, port и brew для определенных настроек в .profile .

Это мои 2 цента на эту тему.

7

Q: ЧТО ТАКОЕ переменные среды?

A: Переменные среды похожи на переменные в любом языке программирования. В случае систем Windows или Unix они хранят различные значения, чтобы позволить программам и задачам получать необходимую информацию об ОС или «среде». Например:

USERPROFILE: каталог пользователя в файлах ОС.

ПОЧТА: где можно найти почту пользователя в файлах ОС.

Q: ЧТО конкретно является переменной PATH?

A: Переменная PATH задает пути к каталогам, которые нужно искать при выполнении команд, как для команд RUN, так и для внутренних вызовов из программ. Это предотвращает необходимость для программы знать свое место установки для вызова других исполняемых процессов.

Он просматривает переменную PATH системы Windows Environment и проверяет каждое местоположение на наличие указанного исполняемого файла. Таким образом, добавление местоположения в переменную PATH позволяет напрямую вызывать исполняемый файл.

Согласно этой статье в Википедии:

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


Q: КАК добавить местоположение в переменную PATH?

A: Вам необходимо отредактировать строку переменной переменной PATH Environment Variables, чтобы включить местоположение вашего исполняемого файла.

Один из способов сделать это описан здесь:

  1. Откройте меню «Пуск» и щелкните правой кнопкой мыши на компьютере. Выберите Свойства.
  2. Выберите Расширенные настройки системы.
  3. На вкладке «Дополнительно» выберите «Переменные среды».
  4. Выберите РЕДАКТИРОВАТЬ или НОВЫЙ. (для PATH вы, скорее всего, хотите редактировать).
  5. Добавьте путь к вашему местоположению. например: C:\wamp\bin\php\php5.5.12;

Я надеюсь, что это проясняет некоторые из путаницы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .