Что такое PATH и другие переменные среды, и как я могу их установить или использовать?

539831
slhck

Вопросы о

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

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

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

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

325
Усталый от необходимости делать это вручную каждый раз, когда мне было нужно, я написал несколько записей в реестре, чтобы добавить записи контекстного меню для AddToPath и RemoveFromPath в папки, используя бесплатное приложение pathed.exe. Ниже приведена ссылка на полное руководство: http://www.addictivetips.com/windows-tips/add-remove-any-folder-to-path-variable-using-context-menu/ Теперь я могу очень легко добавлять папки в переменную PATH или удалите их из нее, без необходимости редактировать какой-либо файл или беспокоиться о том, чтобы испортить форматирование переменной. Надеюсь, поможет. знак равно Haroon Q. Raja 12 лет назад 2
В Windows 8 самая быстрая навигация к изменению системных и пользовательских переменных среды - использование поиска. Win+ Wвызывает поиск по всем настройкам. Поиск `env` и необходимые параметры перечислены. FRIdSUN 10 лет назад 0
Я думаю, что это быстрее и понятнее, открыв `CMD` и набрав` set` или `PowerShell` и введя` Get-Childitem env: `. paradroid 10 лет назад 0
В Windows есть ярлык для открытия свойств System т.е. Панель управления -> Система Это клавиша WIN на клавиатуре + Пауза / Обрыв (WIN + Break). Это чрезвычайно полезно и ускоряет процесс установки новых переменных окружения на Win8, потому что там вы должны щелкнуть через несколько окон в современном пользовательском интерфейсе (да. Если это современно, я вырасту кактус на моей ладони), что просто раздражает. Конечно, вы можете создать скрипт powershell или использовать команду setx и больше об этом не беспокоиться: D termil0r 11 лет назад 1
Если вы много редактируете переменную пути (например, при настройке новой системы), может быть полезно иметь ярлык для диалога «Свойства системы» на рабочем столе. Для этого щелкните правой кнопкой мыши на рабочем столе, выберите «Новый ярлык» и введите systempropertiesadvanced.exe. Затем вы можете щелкнуть ссылку, чтобы перейти в диалоговое окно «Свойства системы», а затем нажать «Переменные среды», чтобы перейти в диалоговое окно с параметрами пути. Brian Burns 9 лет назад 0
Отличный пост об этом: http://www.windows-commandline.com/set-path-command-line/ Royi 7 лет назад 0

4 ответа на вопрос

316
Daniel Beck

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

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

Дорожка

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

В 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. Open Control Panel » System » Advanced » Environment Variables.

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

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

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

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

    • В 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: Path Howto

Начиная с Windows Vista, вы можете использовать `SETX` для внесения постоянных изменений. У него немного другой синтаксис. `SETX` должен быть добавлен из` Windows Server 2003 Resource Kit` для более ранних версий `NT`. paradroid 13 лет назад 10
@paradroid Хорошо, не знал этого (не пользователь Windows). Эта тема - вики сообщества, вы можете просто редактировать эту информацию. Daniel Beck 13 лет назад 1
То, что вы описываете как «Shell», не являются переменными среды. Они также не относятся исключительно к Windows Explorer. Это переменная среды _template_, в которой может участвовать любая программа, которая понимает протокол. См. [Этот ответ ServerFault] (http://serverfault.com/questions/240570/windows-environment-variables-and-manual-registry-editing-no-wrong-values-issue/241012#241012). JdeBP 12 лет назад 0
@JdeBP Я не понимаю, как это применимо здесь, так как пользователь упомянул, что он не работал с редактированием реестра, но * работал * при редактировании с использованием диалога. В чем ваша точка зрения? Daniel Beck 12 лет назад 0
Суть довольно четко сформулирована. Здесь это выделено жирным шрифтом: ** Это не переменные окружения, а просто _template_, из которого _созданы_ переменные окружения, и они _не_ ограничены исключительно Microsoft Windows Explorer («оболочкой»). ** JdeBP 12 лет назад 0
@JdeBP Заголовок раздела предназначался для указания * как установить эти значения в пользовательском интерфейсе *, который в Windows называется * shell *, в отличие от следующего раздела, * интерфейс командной строки *. Я редактировал это еще до того, как увидел ваш комментарий 10 часов назад. Никто никогда не упоминал, что это относится только к Explorer. Daniel Beck 12 лет назад 2
@JdeBP Ответ, на который вы ссылаетесь, на самом деле не применим в этом случае, так как вы говорили об установке значений в реестре. Настройка через диалоговое окно будет транслировать то, что я представляю, как WM_SETTINGCHANGE, и поэтому уведомлять заинтересованные стороны о новых значениях. Вот почему я спросил, как это применимо здесь. Выделение чего-либо жирным шрифтом не меняет его значения и не облегчает его понимание, как повторение того же предложения, только громче. Кроме того, я отредактировал этот пост несколько часов назад, чтобы особо упомянуть, что значения, которые получают процессы, устанавливаются при запуске. Daniel Beck 12 лет назад 1
@JdeBP Вы также можете заметить, что вопрос довольно простой по своей природе. Тщательное объяснение тонкостей того, как распределяются изменения в переменных среды (серьезно, «WM_SETTINGCHANGE»? Windows API? Это не аудитория этого вопроса!) Может оказаться не очень хорошей идеей, так как это может сбить читателя с толку, вместо того, чтобы объяснить, что это переменные о. Daniel Beck 12 лет назад 3
@muntoo Спасибо за работу над этим ответом. Я должен спросить, хотя о формулировке * Он указывает каталоги, в которых исполняемые программы расположены на машине. Программы, расположенные в каталогах, указанных в PATH, можно запускать, не зная и не вводя полный путь к файлу в командной строке. * - По какой причине вы изменили его так же, как и вы (кроме вопросов грамматики)? Программы могут быть расположены где угодно, путь используется только для поиска; поэтому я не согласен с тем, как получилось первое предложение. Daniel Beck 12 лет назад 1
@Daniel Я пытался «нарезать» его на более короткие предложения (что, похоже, защищает каждый учитель английского языка), но я случайно допустил эту ошибку. (Исправлено, сейчас.) Я также добавил предложенный «Например», который может облегчить понимание. Хотя это немного избыточно. Может быть, вы можете помочь лучше интегрировать его в пост? Mateen Ulhaq 12 лет назад 0
Я бы сказал, что это очень сложный ответ, который наверняка поможет многим людям, спасибо всем, кто помог написать его. Я не думаю, что мы должны вдаваться в подробности Windows, но это не тот вопрос, который я собирался решить. slhck 12 лет назад 1
Я не думаю, что Rapid Environment Editor или Path Editor являются открытым исходным кодом. [Лицензия RapidEE] (http://www.rapidee.com/en/license), нет лицензии для `Path Editor`. Возможно, вы думали о [PathEd] (http://pathed.sourceforge.net/)? Ehtesh Choudhury 10 лет назад 0
@Daniel Что вы подразумеваете под "обратите внимание, что если включить% PATH%, * будут * пробелы"? Pacerier 9 лет назад 0
@Pacerier Этот ответ был совместно отредактирован, и этот раздел не написан мной. Тем не менее, я только что проверил, и, по-видимому, `% PATH%` по умолчанию содержит записи, ссылающиеся на папки в `C: \ Program files`, что означает, что он вычисляет строку с пробелами, которые требуют правильного цитирования. Daniel Beck 9 лет назад 0
@DanielBeck, хорошо, я редактировал это. Pacerier 9 лет назад 0
@Pacerier Я не думаю, что это правильно. Нет нормальной конфигурации, где `PATH` * равно *` C: \ Program files`. Daniel Beck 9 лет назад 0
@DanielBeck, почему бы и нет? Я не испытываю никаких проблем. Pacerier 9 лет назад 0
Кавычки необходимы, когда аргумент для команды `set` Windows содержит пробелы. Обе следующие команды будут работать, первая заставит переменную содержать кавычки: `set FunnyCatPictures =" C: \ Users \ Daniel \ Pictures \ Funny Cat Pictures "`, а вторая not: `set" FunnyCatPictures = C: \ Users \ Даниэль \ Картинки \ Смешные картинки Кошек " Melebius 9 лет назад 0
@tripleee Я не уверен, что ваши правки верны. «export VAR = value» работает для меня в `dash`, и [справочная страница POSIX для экспорта] (http://www.unix.com/man-page/POSIX/1posix/export) показывает синтаксис как` export имя [= слово] `. Можете ли вы предоставить ссылку, подтверждающую вашу претензию? G-Man 9 лет назад 0
@ G-Man [теперь я могу] (http://unix.stackexchange.com/questions/193095/where-is-export-var-value-not-available) - спасибо за вопрос (-: изменить предложенное предложение. tripleee 9 лет назад 0
62
grawity

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


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

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

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

  • Примеры предваряя, $HOME/binчтобы $PATHв ударе или 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 Prompt ( command.com) используйте set name=value, как в WinNT.

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

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

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

VMS

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

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

Раздел VMS неверен. DCL имеет `DCL $ PATH` для« [автоматических внешних команд] (http://h71000.www7.hp.com./doc/731final/6489/6489pro_033.html#map_nosymb) ». JdeBP 12 лет назад 2
@grawity, что ты имеешь в виду под "vms не устоял ..."? Pacerier 9 лет назад 2
9
Billy McCloskey

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

Оговорка: К выполнению запуска последовательности вся оболочка, которая .bashrc, .profileи т.д. файлы поставляются в каком порядке ?, когда я должен заново войти, чтобы получить видимость вновь определенных переменных, псевдонимы и т.д. ?, в чем разница между логином, интерактивная и неинтерактивная оболочка - я использую cron? и почему, когда я делаю, . ~/.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 цента на эту тему.

6
user945389

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;

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

Похожие вопросы