Обновите переменные окружения пользователя windows в cygwin - PullRequest
6 голосов
/ 20 января 2012

Я бы хотел обновить среду cygwins после выполнения setx VARNAME VARVALUE (особенно путей).

'export VARNAME = VARVALLUE' - не вариант, потому что мне нужно преобразовать экспортируемое значение, если это путь (в формат, подобный UNIX), но VARNAME может быть путем или нет.

Я хотел бы запустить setx, а затем обновить среду, чтобы cygwin выполнил соответствующие преобразования, если VARNAME - PATH.

Ответы [ 2 ]

3 голосов
/ 23 февраля 2012

Если исходить из ответа Апимана, то, скорее всего, вместо него вы найдете PATH в HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment, который содержит системный PATH вместо пользовательского PATH.Я также сделал несколько исправлений ниже.

Запустите это в среде cygwin, чтобы загрузить системный PATH Windows (или другие переменные среды, изменив имя_переменной)

export var_name="PATH"
export $var_name="$(cygpath -pu "`reg query 'HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment' /v $var_name | grep $var_name | cut -c23-`")"

Конечно, с, код выше, Windows PATH заменит локальный PATH, из-за чего вы потеряете доступ к cygwin / bin и другим.Вместо этого вы, вероятно, захотите добавить Windows PATH к PATH cygwin:

export PATH="$PATH:$(cygpath -pu "`reg query 'HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment' /v PATH| grep PATH | cut -c23-`")"
1 голос
/ 19 октября 2016

Добавлен комментарий выше, но форматирование не очень хорошее.Перепост здесь.

Ответ cut в @nilbus мне не подходит.В моем Win7 до real Path 30 символов.Я использовал это вместо

export PATH="$PATH:$(cygpath -pu "`reg query \
 'HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment' \
 /v PATH|grep PATH|sed 's| \+| |g'|cut -d" " -f4-`")"
...