【问题标题】:Refresh windows user's environment variables in cygwin在cygwin中刷新windows用户的环境变量
【发布时间】:2012-02-14 21:42:36
【问题描述】:

我想在执行 setx VARNAME VARVALUE(特别是路径)后刷新 cygwins 环境。

'export VARNAME=VARVALLUE' 不是一个选项,因为如果导出的值是路径(到类似 UNIX 的格式),我需要转换它,但 VARNAME 可以是路径,也可以不是。

如果 VARNAME 是 PATH,我想运行 setx 然后刷新环境,以便 cygwin 执行相应的转换。

【问题讨论】:

  • 最后我使用了:export ${var_name}="reg query HKCU\\Environment /v ${var_name} | grep ${var_name} | cut -c23- | cygpath -pu "; 它并不干净,但在大多数情况下都有效。如果 VARVALUE 不是路径 cygpath 将保持不变,除非它看起来像路径但不应该更改,在这种情况下它会搞乱一切,但这不是常见的情况

标签: path window cygwin environment-variables


【解决方案1】:

在上面添加了评论,但格式不好。在这里转发。

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

【讨论】:

    【解决方案2】:

    要以 Apiman 的回答为基础,通常您更有可能在 HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment 中找到 PATH,其中包含系统 PATH 而不是用户的 PATH。我还在下面做了一些更正。

    在 cygwin 环境中运行这个来加载 Windows 系统 PATH(或通过更改 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-`")"
    

    当然,使用上面的代码,windows PATH 将替换本地 PATH,使您无法访问 cygwin /bin 和其他。相反,您可能希望将 Windows PATH 附加到 cygwin PATH:

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

    【讨论】:

    • 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-`")"
    猜你喜欢
    • 2012-07-07
    • 2011-03-07
    • 2015-08-20
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 2012-12-18
    • 1970-01-01
    • 2010-10-09
    相关资源
    最近更新 更多