2012-01-20 8 views
5

Vorrei aggiornare l'ambiente Cygwins dopo aver eseguito un VARNAME VARVALUE (specialmente i percorsi) di setx.Aggiorna le variabili d'ambiente dell'utente di windows in cygwin

'export VARNAME = VARVALLUE' non è un'opzione perché avrei bisogno di trasformare il valore esportato se si tratta di un percorso (in formato UNIX simile), ma VARNAME può essere un percorso o meno.

Vorrei eseguire setx e quindi aggiornare l'ambiente in modo che cygwin esegua le trasformazioni corrispondenti se VARNAME è PATH.

+0

Infine ho fatto usando: ** export $ {} nome_var = "' reg query HKLM \\ Ambiente/v $ {} nome_var | grep $ {} nome_var | tagliato -c23- | cygpath -pu '"; ** Non è pulito ma funziona nella maggior parte dei casi. Se VARVALUE non è un percorso cygpath lo lascerà invariato a meno che non assomigli ad un percorso ma non dovrebbe essere cambiato, in tal caso esso pasticcia tutto ma non è una situazione comune – aitorpazos

risposta

3

Per sfruttare la risposta di Apiman, è più probabile che in generale sia presente il PERCORSO in HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment, che contiene il PATH di sistema invece del PERCORSO dell'utente. Ho anche apportato alcune correzioni qui sotto.

Esegui questo nell'ambiente cygwin per caricare il PATH di sistema di Windows (o di altre variabili d'ambiente cambiando nome_var)

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

Naturalmente con il, codice di cui sopra, il Windows PATH sostituirà il percorso locale, rendendo perdi l'accesso a cygwin/bin e ad altri. Invece, probabilmente si desidera aggiungere il percorso di Windows per il PATH cygwin:

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

Il 'cut' non funziona per me. Nel mio Win7, ci sono 30 caratteri prima del 'percorso reale'. L'ho usato invece '' 'export PATH =" $ PATH: $ (cygpath -pu "' reg query 'HKLM \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment' /v PATH | grep PATH | sed 's | \ + | | g '| cut -d "" -f4-'") "' '' – Sungam

0

Aggiunto commento di cui sopra, ma la formattazione non è buona. Ripubblica qui.

La risposta cut in @nilbus non funziona per me. Nel mio Win7, ci sono 30 caratteri prima del real Path. Ho usato questo posto

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