如何从 WSL 中删除 Win10 的 PATH
- 2024-10-31 08:38:00
- admin 原创
- 68
问题描述:
我在 Win10 中使用 Windows Subsystem Linux(Ubuntu 18.04),并在其中安装了 Maven。此外,我之前在 Win10 中安装过 maven。现在当我mvn compile
在 WSL 中使用时,它告诉我 maven 编译失败。我使用which mvn
并发现它引用了 Win10 中安装的 Maven。
另外我运行env
发现Win10的Path被添加到了WSL的Path中,我在使用WSL的时候不想使用Win10的Path里的任何东西,怎么办?
解决方案 1:
对于高于 17713 的Windows 版本:
WSL 使用每个 Linux VM 文件系统内的文件/etc/wsl.conf
来配置其行为。将以下配置设置(此处说明)添加到/etc/wsl.conf
,并在必要时创建该文件:
[interop]
appendWindowsPath = false
请注意,appendWindowsPath
必须位于 下[interop]
才能使其正常工作。您可能需要使用wsl --shutdown
或关闭 WSL 的当前实例才能wsl -t <Distribution>
使更改生效。您还可以添加选项enabled = false
(也在 部分下[interop]
),以禁用从 WSL 内部启动 Windows 二进制文件的功能。
对于低于 17713 的 Windows 版本:
WSL 使用WSL_DISTRIBUTION_FLAGS 枚举wslapi.h
来配置其行为。以下是头文件中的代码片段。
/* Flags specifying WSL behavior */
typedef enum
{
WSL_DISTRIBUTION_FLAGS_NONE = 0x0,
WSL_DISTRIBUTION_FLAGS_ENABLE_INTEROP = 0x1,
WSL_DISTRIBUTION_FLAGS_APPEND_NT_PATH = 0x2,
WSL_DISTRIBUTION_FLAGS_ENABLE_DRIVE_MOUNTING = 0x4
} WSL_DISTRIBUTION_FLAGS;
#define WSL_DISTRIBUTION_FLAGS_VALID (WSL_DISTRIBUTION_FLAGS_ENABLE_INTEROP | WSL_DISTRIBUTION_FLAGS_APPEND_NT_PATH | WSL_DISTRIBUTION_FLAGS_ENABLE_DRIVE_MOUNTING)
#define WSL_DISTRIBUTION_FLAGS_DEFAULT (WSL_DISTRIBUTION_FLAGS_ENABLE_INTEROP | WSL_DISTRIBUTION_FLAGS_APPEND_NT_PATH | WSL_DISTRIBUTION_FLAGS_ENABLE_DRIVE_MOUNTING)
首次启动时,WSL 使用默认值flag = 0x7
(即 0+1+2+4)。如果是默认值flag = 0x5
(即 0+1+4),则 Windows NT 路径不会附加在$PATH
环境变量中。要查找该标志的注册表值,请HKCUSoftwareMicrosoftWindowsCurrentVersionLxss
在注册表编辑器中打开。。打开每个具有 UID 值的子项,并与已安装的发行版名称regedit.exe
匹配。然后编辑/将DWORD 注册表值添加到。DistributionName
`Flags`0x5
解决方案 2:
第一步-在 WSL 上禁用 Windows 路径
选项 A:添加到 wsl.conf(Build 17093 之后)
sudo nano /etc/wsl.conf
然后添加
[interop]
appendWindowsPath = false
然后Ctrl+S
然后Ctrl+X
然后exit
。
选项 B:在运行时删除路径
将以下代码添加到.bashrc
PATH=$(/usr/bin/printenv PATH | /usr/bin/perl -ne 'print join(":", grep { !//mnt/[a-z]/ } split(/:/));')
替代方案(运行一次!):
echo "export PATH=`echo $PATH | tr ':' '
' | grep -v /mnt/ | tr '
' ':'`" >> ~/.bashrc
方案 2
只需添加export PATH="$PATH:/usr/bin"
到 的末尾~/.bashrc
,这样它usr/bin
就会优先于 Windows 的应用程序。这可能不是一个好的选择。
选项C:
编辑 Windows 注册表。目前不推荐。
HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionLxss{GUID}Flags
Flags
从更改7
为5
以排除WSL_DISTRIBUTION_FLAGS_APPEND_NT_PATH
枚举。
第二步-重启 WSL
选项A:
简单重新进入WSL并测试:
echo $PATH
选项 B:
以管理员身份在 PowerShell 中运行:
Restart-Service LxssManager
选项C:
使用以下方式从 PowerShell 以管理员身份终止 WSL
wslconfig /t Ubuntu
Ubuntu-18.04
就我的情况而言,请根据需要进行调整
参考:
https://github.com/microsoft/WSL/issues/1493
https://devblogs.microsoft.com/commandline/automatically-configuring-wsl
https://gist.github.com/ilbunilcho/4280bd55a10cefef75e74986b6bff936
解决方案 3:
修改Flags
Windows 注册表中的属性仍然适用于 WSL 2。对我来说,它工作正常,没有引起任何问题。唯一的区别是,Flags
在我的情况下,初始值是0x0F (= 15)
。将其更改为0x0D (= 13)
可防止将 Windows %PATH% 附加到 Ubuntu $PATH。
您仍然可以在注册表中找到所有 WSL 2 发行版HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionLxss
。每个发行版都有自己的 GUID 子文件夹,如下所示
HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionLxss\n |
|-- {40db8e6f-0520-4ddd-9c8b-0f5414e685c9}
|-- {6a61345d-2dc6-4b9e-abb1-28a26d64e19f}
|-- {bce2f98a-b234-4749-adbe-7311df078d26}
|-- ...
|-- {ea808e4e-dc24-4645-aed0-ebd67c871e01}
当然,你的 GUID 会与我的不同。
通过单击每个 GUID 并查看DistributionName
属性,您可以找出哪个 GUID 指的是哪个 WSL 2 发行版,请参见下面屏幕截图中的 (1)。然后只需修改值Flags
并将其设置为 13,请参见屏幕截图中的 (2)。如果属性中的值Flags
与它不同0x0F
,则无关紧要,只需将其减少 2 就可以了。
解决方案 4:
警告:如果您的 WSL2 发行版是在 Windows 版本 17093 之后安装的,请不要将“Flags”注册表值从 0xf 更改为 0x5,就像 WSL1 的情况一样。这会在下次关机/重启时破坏您的 WSL2 设置,从而丢失所有数据。将其更改为 0xD 将有助于从您的 unix 路径中删除 NT 路径。
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件