2012-01-20 17 views
5

Chciałbym odświeżyć środowisko cygwins po wykonaniu setx VARNALAME VARNAME (specjalnie ścieżki).Odświeżanie zmiennych środowiskowych użytkownika systemu Windows w cygwin

'export VARNAME = VARVALLUE' nie jest opcją, ponieważ potrzebowałbym przekształcić wyeksportowaną wartość, jeśli jest to ścieżka (do formatu UNIXowego), ale VARNAME może być ścieżką lub nie.

Chciałbym uruchomić setx, a następnie odświeżyć środowisko, aby cygwin wykonał odpowiednie transformacje, jeśli VARNAME jest PATH.

+0

końcu zrobiłem to za pomocą: ** eksportowej $ {var_name} = "' query reg HKCU \\ Środowisko/v $ {var_name} | grep $ {var_name} | wyciąć -c23- | cygpath -pu '"; ** To nie jest czyste, ale działa w większości przypadków. Jeśli VARVALUE nie jest ścieżką, ścieżka cygpath pozostawi ją niezmienioną, chyba że wygląda na ścieżkę, ale nie powinna być zmieniona, w takim przypadku wszystko zepsuje, ale to nie jest zwykła sytuacja. – aitorpazos

Odpowiedz

3

Aby zbudować na odpowiedzi Apimana, jest bardziej prawdopodobne, że ogólnie znajdziesz PATH w HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment, która zawiera PATH systemu zamiast PATH użytkownika. Wprowadziłem również kilka poprawek poniżej.

Run to w cygwin środowiska załadowania ścieżki systemu Windows (lub inne zmienne środowiskowe zmieniając 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-`")" 

Oczywiście z, kod powyżej, ścieżka okien zastąpi ścieżkę lokalną, dzięki czemu tracisz dostęp do cygwin/bin i innych. Zamiast tego, prawdopodobnie chcesz dołączyć do systemu Windows PATH PATH cygwin:

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

"Cięcie" nie działa dla mnie. W moim Win7 jest 30 znaków przed "prawdziwą ścieżką". Użyłem tego zamiast: '' '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

Dodany komentarz powyżej, ale formatowanie nie jest dobre. Prześlij tutaj.

Odpowiedź cut w @nilbus nie działa dla mnie. W moim Win7 jest 30 znaków przed real Path. Kiedyś to zamiast

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