DrvFs location of %UserProfile%



在 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
}

相关内容

  • 没有找到相关文章

最新更新