在 Linux 的 Windows 子系统中,我如何获得指向 Windows 个性内部%UserProfile%
内容的 DrvFs 路径? 我已经在WSL的Bash中看到了访问Windows环境变量。获取一个环境变量似乎相当复杂,并且无论如何都需要从%UserProfile%
内部硬编码一些东西($LXSS_ROOT
(。
这似乎有效:
win_userprofile="$(cmd.exe /c "<nul set /p=%UserProfile%" 2>/dev/null)"
win_userprofile_drive="${win_userprofile%%:*}:"
userprofile_mount="$(findmnt --noheadings --first-only --output TARGET "$win_userprofile_drive")"
win_userprofile_dir="${win_userprofile#*:}"
userprofile="${userprofile_mount}${win_userprofile_dir//\//}"
感谢Microsoft的Craig Loewen让我开始。
幸运的是,自从Windows 10构建17063(包含在Windows 10 1803中(以来,有一种更直接的方法可以在Windows和WSL之间共享环境变量(WSLENV
(。
若要使%USERPROFILE%
在 WSL 中可访问,请在WSLENV
变量中列出变量。如果您尚未使用WSLENV
则只需在Windows中运行一次:
setx WSLENV USERPROFILE/up
这将导致来自 Windows 的%USERPROFILE%
可以在 WSL shell 中作为$USERPROFILE
访问,并将 Windows 路径转换为 Unix 格式。如果您不想转换路径,只需省略p
:
setx WSLENV USERPROFILE/u
更多详情:
- https://learn.microsoft.com/en-us/windows/wsl/interop#share-environment-variables-between-windows-and-wsl
- https://devblogs.microsoft.com/commandline/share-environment-vars-between-wsl-and-windows/
我在cdw
函数(cd到Windows路径(中使用该变量。我在 Ubuntu 中自动执行的~/.bash_aliases
中定义了它:
#!/bin/bash
cdw () {
if test "$#" -eq 0 ; then
cd "$USERPROFILE"
elif test "$1" = - ; then
cd "$1"
else
cd -- "$(wslpath "$@")"
fi
}