我想通过WSL bash提示访问现有的Windows环境变量,例如USERPROFILE。 Microsoft提供了有关使用WSLENV here的信息,我试图使用它:
我在通常的Windows"环境变量"中添加了WSLENV
作为新的系统变量。控制面板,将其设置为USERPROFILE/u
。然后我从任务栏打开Ubuntu,输入:
$ echo $USERPROFILE
......但没有任何回报。
答案 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 命令确认当前目录正确。