如何从 WSL 中删除 Win10 的 PATH

2024-10-31 08:38:00
admin
原创
66
摘要:问题描述:我在 Win10 中使用 Windows Subsystem Linux(Ubuntu 18.04),并在其中安装了 Maven。此外,我之前在 Win10 中安装过 maven。现在当我mvn compile在 WSL 中使用时,它告诉我 maven 编译失败。我使用which mvn并发现它引用...

问题描述:

我在 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从更改75以排除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:

修改FlagsWindows 注册表中的属性仍然适用于 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 路径。

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用