6

Предположим, я захожу в окно System Properties и добавляю переменную окружения в Path. Если у меня открыто окно терминала, оно не будет знать об изменениях, поэтому я закрываю его и открываю другое.

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

2 ответа2

4

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

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

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

Из КБ http://support.microsoft.com/kb/104011

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

Чтобы внести эти изменения без выхода из системы, передайте сообщение WM_SETTINGCHANGE всем окнам системы, чтобы любые заинтересованные приложения (такие как Windows Explorer, Диспетчер программ, Диспетчер задач, Панель управления и т.д.) Могли выполнить обновление.

1

Ну, в консоли Windows, просто введите cmd и нажмите Enter. Технически это помещает вас в новый сеанс внутри другого сеанса, но у него будут новые переменные env. Чего не будет, так это информации о сеансе из внешнего сеанса. Так что любые переменные env или история команд, такие вещи.

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