从WSL访问现有Windows环境变量

时间:2018-02-01 16:21:55

标签: bash windows-10 environment-variables windows-subsystem-for-linux

我想通过WSL bash提示访问现有的Windows环境变量,例如USERPROFILE。 Microsoft提供了有关使用WSLENV here的信息,我试图使用它:

我在通常的Windows"环境变量"中添加了WSLENV作为新的系统变量。控制面板,将其设置为USERPROFILE/u。然后我从任务栏打开Ubuntu,输入:

$ echo $USERPROFILE

......但没有任何回报。

2 个答案:

答案 0 :(得分:1)

为你做了一个解决方法。

similarity

我还没有检查过$ /mnt/c/Windows/System32/cmd.exe /C "echo %OS%" Windows_NT $ tmpvar=`/mnt/c/Windows/System32/cmd.exe /C "echo %OS%"` $ echo $tmpvar Windows_NT ,但是上层应该有效。虽然不是很优雅。

答案 1 :(得分:1)

改进了Gábor的答案,因为正如我发现的那样,它有一个小错误,用这种方法获得的变量包含不可见的回车符,这可能会导致意外的问题。 这是示例:

$ cd /mnt/c/
$ mkdir Windows_NT
$ tmpvar=`/mnt/c/Windows/System32/cmd.exe /C "echo %OS%"`
$ echo $tmpvar
Windows_NT

一切似乎都还可以,但是没有:

$ cd $tmpvar
: No such file or directory

这是因为 tmpvar 变量在末尾包含其他回车符(aka ^ M \ r )。我们可以通过ls命令进行检查:

$ ls -ld $tmpvar
ls: cannot access 'Windows_NT'$'\r': No such file or directory

为了删除该字符,可以使用 sed tr

来另外处理输出。
tmpvar=$(cmd.exe /C echo %OS%|sed $'s/\r$//')

tmpvar=$(cmd.exe /C echo %OS%|tr -d '\r')

我也简化了命令。在最近的Windows 10更新中,路径/ mnt / c / Windows / System32已默认包含在$ PATH WSL变量中,因此, cmd.exe 应该可以使用。

现在, ls cd 命令可以正常运行:

$ ls -ld $tmpvar
drwxrwxrwx 1 ubuntu ubuntu 512 Feb 12 05:38 Windows_NT
$ cd $tmpvar
$ pwd
/mnt/c/Windows_NT

pwd 命令确认当前目录正确。