2012-01-20 6 views
5

Я хотел бы обновить среду cygwins после выполнения setx VARNAME VARVALUE (специально пути).Обновить переменные среды пользователя Windows в cygwin

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

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

+0

Наконец я сделал это с помощью: ** экспорта $ {имя_переменной} = "' рег запрос HKCU \\ Environment/v $ {имя_переменной} | Grep $ {имя_переменной} | вырезать -c23- | cygpath -pu ';; ** Это не чистый, но он работает в большинстве случаев. Если VARVALUE не путь, то cygpath оставит его неизменным, если он не похож на путь, но его не следует изменять, в этом случае он все испортит, но это не обычная ситуация. – aitorpazos

ответ

3

Чтобы использовать ответ Апимана, скорее всего, вы найдете 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-`")" 

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

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

'cut' не работает для меня. В моем Win7 есть 30 символов перед «реальным путём». Я использовал это вместо '' 'export PATH =" $ PATH: $ (cygpath -pu "' reg query 'HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment' /v PATH | grep PATH | sed | \ + | | g '| cut -d "" -f4-'") "' '' – Sungam

0

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

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

export PATH="$PATH:$(cygpath -pu "`reg query \ 
'HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment' \ 
/v PATH|grep PATH|sed 's| \+| |g'|cut -d" " -f4-`")" 
Смежные вопросы