329

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


Вопросы о

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

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

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

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

Усталый от необходимости делать это вручную каждый раз, когда мне было нужно, я написал несколько записей в реестре, чтобы добавить записи контекстного меню для AddToPath и RemoveFromPath в папки, используя бесплатное приложение pathed.exe. Ниже приведена ссылка на полное руководство: addictivetips.com/windows-tips/… Теперь я могу очень легко добавлять папки в переменную PATH или удалять их без необходимости редактировать какой-либо файл или беспокоиться о том, чтобы испортить форматирование переменная. Надеюсь, поможет. =) (16 апреля '12 в 14:48)

В Windows есть ярлык для открытия свойств системы, т.е. Панель управления - & gt; Система Это клавиша WIN на клавиатуре + пауза/прерывание (WIN + прерывание). Это чрезвычайно полезно и ускоряет процесс установки новых переменных окружения в Win8, потому что там вы должны щелкнуть через несколько окон в современном пользовательском интерфейсе (да. Если это современно, я вырасту кактус на моей ладони), что просто раздражает. Конечно, вы можете создать скрипт powershell или использовать команду setx и больше не беспокоиться об этом: D (8 ноября '12 в 16:59)

В Windows 8 самая быстрая навигация к изменению системных и пользовательских переменных среды - использование поиска. & Lt; & KBD GT; Win & л;/KBD & GT; + & л; KBD & GT; W & л;/KBD & GT; вызывает поиск всех настроек. Найдите env и перечислите необходимые параметры. (25 февраля '14 в 0:10)

Я думаю, что это быстрее и понятнее, открыв CMD и введя set или PowerShell и введя Get-Childitem env: , (25 февраля '14 в 0:17)

Если вы много редактируете переменную пути (например, при настройке новой системы), может быть полезно иметь ярлык для диалога «Свойства системы» на рабочем столе. Для этого щелкните правой кнопкой мыши на рабочем столе, выберите «Новый ярлык» и введите systempropertiesadvanced.exe. Затем вы можете щелкнуть ссылку, чтобы перейти в диалоговое окно «Свойства системы», а затем нажать «Переменные среды», чтобы перейти в диалоговое окно с параметрами пути. (9 марта '15 в 18:12)

Ответов: 4

63

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


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

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 строки set в C:\AUTOEXEC.BAT, затем перезагрузите компьютер.

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

VMS

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

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

@grawity, что ты имеешь в виду под "vms не устоял ..."? (12 ноября '14 в 0:19)
9

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

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

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

316

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

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

Дорожка

Один из самых известных называется 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

Начиная с Windows Vista, вы можете использовать SETX для внесения постоянных изменений. У него немного другой синтаксис. SETX необходимо добавить из Windows Server 2003 Resource Kit для более ранних версий NT . (16 мая '11 в 23:58)

@paradroid Хорошо, не знал этого (не пользователь Windows). Эта тема - вики сообщества, вы можете просто изменить эту информацию. (17 мая '11 в 4:05)

То, что вы описываете как «Shell», не являются переменными среды. Они также не относятся исключительно к Windows Explorer. Это переменная среды template , в которой может участвовать любая программа, которая понимает протокол. См. этот ответ ServerFault . (24 мая '11 в 7:11)

@JdeBP Я не понимаю, как это применимо здесь, поскольку пользователь упомянул, что он не работал с редактированием реестра, но работал при редактировании с использованием диалогового окна. В чем ваша точка зрения? (24 мая '11 в 8:07)

Суть довольно четко сформулирована. Здесь оно выделено жирным шрифтом: Это не переменные среды, а просто шаблон , из которого создаются переменные среды , и они не ограничивается исключительно Microsoft Windows Explorer («оболочкой»). (24 мая '11 в 11:15)

@JdeBP Заголовок раздела предназначался для ссылки на способ установки этих значений в пользовательском интерфейсе , который в Windows называется shell , в отличие от следующего раздела: интерфейс командной строки . Я редактировал это еще до того, как увидел ваш комментарий 10 часов назад. Никто никогда не упоминал, что это относится только к Explorer. (24 мая '11 в 18:15)

@JdeBP Ответ, на который вы ссылаетесь, в данном случае не применим, поскольку вы говорили об установке значений в реестре. Настройка через диалоговое окно будет транслировать то, что WM_SETTINGCHANGE я представляю, и поэтому уведомлять заинтересованные стороны о новых значениях. Вот почему я спросил, как это применимо здесь. Создание чего-то жирным шрифтом не меняет его значения и не облегчает его понимание, как повторение одного и того же предложения, только громче. Кроме того, я отредактировал этот пост несколько часов назад, чтобы особо отметить, что значения, которые получают процессы, устанавливаются при запуске. (24 мая '11 в 18:19)

@JdeBP Вы также можете заметить, что вопрос довольно простой по своей природе. Тщательное объяснение тонкостей того, как распределяются изменения в переменных среды (серьезно, WM_SETTINGCHANGE ? Windows API? Это не аудитория этого вопроса!) Может быть не очень хорошей идеей, так как это может запутать читателя вместо того, чтобы объяснять, о чем эти переменные. (24 мая '11 в 18:23)

@muntoo Спасибо за работу над этим ответом. Я должен спросить, хотя о формулировке <я> Он определяет каталоги, в которых исполняемые программы расположены на машине. Программы, расположенные в каталогах, указанных в PATH, можно запускать, не зная и не вводя полный путь к файлу в командной строке. - по какой причине вы изменили его, как и вы (кроме вопросов грамматики)? Программы могут быть расположены где угодно, путь используется только для поиска; поэтому я не согласен с тем, как получилось первое предложение. (25 мая '11 в 6:25)

@Daniel Я пытался «нарезать» его на более короткие предложения (что, похоже, защищает каждый учитель английского), но я случайно допустил эту ошибку. (Исправлено, сейчас.) Я также добавил предложенный «Например», который может облегчить понимание. Хотя это немного избыточно. Может быть, вы можете помочь лучше интегрировать его в пост? (25 мая '11 в 7:24)

Я бы сказал, что это очень сложный ответ, который наверняка поможет многим людям, спасибо всем, кто помог написать его. Я не думаю, что мы должны вдаваться в подробности Windows, это не тот вопрос, который я намеревался в любом случае. (25 мая '11 в 7:41)

Я не думаю, что Rapid Environment Editor или Path Editor являются открытым исходным кодом. Лицензия RapidEE , нет лицензии для Path Editor . Возможно, вы думали о PathEd ? (13 сентября '13 в 21:18)

@Daniel Что вы подразумеваете под "обратите внимание, что если включен% PATH%, будут пробелы"? (12 ноября '14 в 0:16)

@Pacerier Этот ответ был совместно отредактирован, и этот раздел не написан мной. Тем не менее, я только что проверил, и кажется, что % PATH% по умолчанию содержит записи, относящиеся к папкам в C: \ Program files , что означает, что он вычисляет строку с необходимыми пробелами правильное цитирование. (12 ноября '14 в 6:19)

@DanielBeck, хорошо, я редактировал это. (13 ноября '14 в 20:34)

@Pacerier Я не думаю, что это правильно. Нет нормальной конфигурации, в которой PATH равен C: \ Program files . (13 ноября '14 в 21:45)

@DanielBeck, почему бы и нет? Я не испытываю никаких проблем. (14 ноября '14 в 8:30)

Кавычки необходимы, когда аргумент для команды Windows set содержит пробелы. Обе следующие команды будут работать, первая заставит переменную содержать кавычки: set FunnyCatPictures = "C: \ Users \ Daniel \ Pictures \ Funny Cat Pictures" , а вторая нет: set " FunnyCatPictures = C: \ Users \ Daniel \ Pictures \ Funny Cat Pictures " (9 февраля '15 в 5:58)

@tripleee Я не уверен, что ваши правки верны. "export VAR = value" работает для меня в dash и справочная страница POSIX для экспорта показывает синтаксис в виде имя экспорта [= word] . Можете ли вы предоставить ссылку, подтверждающую вашу претензию? (28 марта '15 в 1:08)

@ G-Man Теперь я могу - спасибо, что спросили (-: Изменить внесенное предложение. (28 марта '15 в 17:46)

Дополнить ответ

Server-Help.Ru - 2019. The website content is licensed CC BY NC SA 4.0. <|> Политика Конфиденциальности