如何从 WSL 中删除 Win10 的 PATH

2024-10-31 08:38:00
admin
原创
367
摘要:问题描述:我在 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 路径。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用