2012-01-20 79 views
5

我想在執行setx VARNAME VARVALUE(特殊路徑)之後刷新cygwins環境。在cygwin中刷新windows用戶的環境變量

'export VARNAME = VARVALLUE'不是一個選項,因爲如果它是一個路徑(對於類似UNIX的格式),我需要轉換導出的值,但是VARNAME可以是路徑或不是。

我想運行setx,然後刷新環境,以便在VARNAME是PATH時,cygwin執行相應的轉換。

+0

最後我做到了使用: **出口$ {} VAR_NAME =「'REG查詢HKCU \\環境/ V $ {} VAR_NAME | grep的$ {VAR_NAME} |切-c23- | cygpath -pu'「; ** 它不乾淨,但它在大多數情況下工作。如果VARVALUE不是一個路徑,那麼cygpath會使其保持不變,除非它看起來像一條路徑,但不應該改變,在這種情況下,它會攪亂一切,但這不是一種常見情況 – aitorpazos

回答

3

要建立在Apiman的答案上,通常更有可能在HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment中找到PATH,它包含系統PATH而不是用戶的PATH。我也在下面做了一些更正。在cygwin環境(通過改變VAR_NAME或其他環境變量)來加載Windows系統PATH

運行此

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路徑將取代本地路徑,使得你失去了對cygwin/bin等的訪問。相反,您可能想要將Windows PATH附加到cygwin路徑:

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's | \ + | | g'| cut -d「」-f4-'「)」''' – Sungam

0

上面添加了註釋,但格式不好。轉發到這裏。

@nilbus'cut不適用於我。在我的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-`")"