2012-01-20 15 views
5

Me gustaría actualizar el entorno cygwins después de hacer un setx VARNAME VARVALUE (especialmente rutas).Actualice las variables de entorno del usuario de Windows en cygwin

'export VARNAME = VARVALLUE' no es una opción porque necesitaría transformar el valor exportado si es una ruta (al formato similar a UNIX), pero VARNAME puede ser una ruta o no.

Me gustaría ejecutar setx y luego actualizar el entorno para que cygwin realice las transformaciones correspondientes si VARNAME es PATH.

+0

Finalmente lo hice usando: ** exportación $ {} var_name = "' reg query HKCU \\ Medio Ambiente/v $ {} var_name | grep $ {} var_name | cortó -c23- | cygpath -pu '"; ** No está limpio, pero funciona en la mayoría de los casos. Si VARVALUE no es una ruta, cygpath lo dejará sin cambios a menos que parezca una ruta, pero no debería cambiarse, en ese caso lo desordenará todo, pero esa no es una situación común – aitorpazos

Respuesta

3

Para construir sobre la respuesta de Apiman, es más probable que en general encuentre la RUTA en HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment, que contiene la RUTA del sistema en lugar de la RUTA del usuario. También hice algunas correcciones a continuación.

Ejecutar este en el entorno cygwin para cargar la ruta del sistema de Windows (u otras variables de entorno cambiando var_name)

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-`")" 

Por supuesto con el, código anterior, la ruta de Windows reemplazará la ruta local, haciendo Pierdes acceso a cygwin/bin y otros. En su lugar, es probable que desee añadir el PATH de Windows para el PATH cygwin:

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

El 'corte' no funciona para mí. En mi Win7, hay 30 caracteres antes del 'camino real'. Usé esto en su lugar '' 'export PATH =" $ PATH: $ (cygpath -pu "' consulta de registro 'HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment' /v RUTA | grep PATH | sed 's | \ + | | g '| cut -d "" -f4-'") "' '' – Sungam

0

Agregado comentario anterior pero el formato no es bueno. Repostar aquí.

El cut en @nilbus 'respuesta no funciona para mí. En mi Win7, hay 30 caracteres antes del real Path. He utilizado este lugar

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