dua*_*led 12 windows-subsystem-for-linux
我想从 bash 中获取 Windows“主机”用户主目录,所以我的理论环境变量(或程序)
echo $WINHOME
Run Code Online (Sandbox Code Playgroud)
会输出类似的东西
/mnt/c/Users/dualed
Run Code Online (Sandbox Code Playgroud)
这会以某种方式可能吗?
当我搜索它时,我只找到相反的结果(从主机找到LXSS用户路径)
我有一个从 中提取它的后备想法$PATH,因为有一些可预测的路径,例如包含 的路径AppData,但如果可能的话,我更愿意保持简单。
fel*_*crs 12
随着wslpath和wslvar:
$ wslpath "$(wslvar USERPROFILE)"
/mnt/c/Users/felipesantos
Run Code Online (Sandbox Code Playgroud)
幸运的是,自 Windows 10 build 17063(包含在 Windows 10 1803 中)以来,有一种更直接的方法可以在 Windows 和 WSL 之间共享环境变量 - WSLENV.
为了%USERPROFILE%在 WSL 中进行访问,您可以在变量中列出变量名称WSLENV。如果您尚未使用,WSLENV则只需在会话中运行以下命令一次cmd.exe。该命令setx将变量永久写入 Windows 注册表中的主环境:
setx WSLENV USERPROFILE/up
Run Code Online (Sandbox Code Playgroud)
此WSLENV设置将使 WSL 能够像在 WSL shell 中%USERPROFILE%一样从 Windows 进行访问$USERPROFILE。Windows 目录路径将转换为 Unix 格式。如果您不想转换路径,只需省略p:
setx WSLENV USERPROFILE/u
Run Code Online (Sandbox Code Playgroud)
如果需要传输多个变量,请用冒号分隔它们。更多细节:
我在函数中使用该变量cdw(cd 到 Windows 路径)。我定义它~/.bash_aliases在Ubuntu中自动执行:
#!/bin/bash
cdw () {
if test "$#" -eq 0 ; then
cd "$USERPROFILE"
elif test "$1" = - ; then
cd "$1"
else
cd -- "$(wslpath "$@")"
fi
}
Run Code Online (Sandbox Code Playgroud)
您可以cmd.exe从 bash启动以获取主机环境变量。在下面,win_userprofile有你的答案,其他变量是为了完整性。
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//\\//}"
Run Code Online (Sandbox Code Playgroud)
资料来源:微软的Craig Loewen和 Michael Hoffman。
| 归档时间: |
|
| 查看次数: |
11087 次 |
| 最近记录: |