如何从WSL中删除Win10的路径

时间:2018-07-14 07:06:33

标签: linux maven path windows-10 windows-subsystem-for-linux

我在Win10中使用Windows子系统Linux(Ubuntu 18.04),并在其中安装了Maven。 此外,我之前在Win10中安装了一个Maven。 现在,当我在WSL中使用mvn compile时,它告诉我maven编译失败。 我使用which mvn,发现它引用了Win10中安装的Maven。

此外,我运行env,发现Win10的路径已添加到WSL的路径中。 使用WSL时,我不想在Win10的路径中使用任何东西,该怎么办?

4 个答案:

答案 0 :(得分:16)

  • 对于Windows而言,其版本低于17713:WSL使用WSL_DISTRIBUTION_FLAGS Enumeration来配置Windows和Linux端之间的行为和互操作性。这是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使用默认标志= 0x7(即0 + 1 + 2 + 4)。如果该标志= 0x5(即0 + 1 + 4),则Windows NT路径不会附加在$PATH环境变量中。那么,如何找到标志注册表值? aka在注册表编辑器中打开HKCU\Software\Microsoft\Windows\CurrentVersion\Lxss注册表路径。 regedit.exe。打开具有UID值的每个子项,并将DistributionName与已安装的分发名称匹配。然后将Flags DWORD注册表值编辑/添加到0x5

  • 对于Windows版本HIGHER than 17713:在新版本中,WSL使用wsl.conf file来配置Windows和Linux端之间的行为和互操作性。该wsl.conf文件位于INI file format之后。运行wsl.exebash.exe。创建文件/etc/wsl.conf。然后,使用Linux中的任何文本编辑器添加以下interop section

    [interop]
    enabled=false # enable launch of Windows binaries; default is true
    appendWindowsPath=false # append Windows path to $PATH variable; default is true
    

    保存该文件并从wsl.exe退出。现在,无论何时执行WSL,Windows路径都不会附加到Linux $PATH环境变量中。

答案 1 :(得分:11)

第一步-在WSL上禁用Windows路径

选项A:添加到wsl.conf(在内部版本17093之后)

sudo nano /etc/wsl.conf

然后添加

[interop]
appendWindowsPath = false

然后 先依次Ctrl+SCtrl+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 ':' '\n' | grep -v /mnt/ | tr '\n' ':'`" >> ~/.bashrc

替代2

只需将export PATH="$PATH:/usr/bin"添加到~/.bashrc的末尾,以使usr/bin优先于Windows应用程序。可能不是一个好选择。

选项C:

编辑Windows注册表。 目前不推荐。

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\{GUID}\Flags

Flags7更改为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

答案 2 :(得分:0)

在Windows注册表中修改{'Blue': {'Discrepancies Identified': 2082, 'Files Analyzed': 1098, 'Files Assigned': 87, 'Files Loaded': 1595}, 'Red': {'Discrepancies Identified': 1606, 'Files Analyzed': 59, 'Files Assigned': 1510, 'Files Loaded': 110}, 'Yellow': {'Discrepancies Identified': 47, 'Files Analyzed': 1238, 'Files Assigned': 1253, 'Files Loaded': 4285}} 属性仍然可以与WSL 2一起使用。它对我来说很好用,也没有引起任何问题。唯一的区别是,在我的情况下,初始Flags的值为Flags。将其更改为0x0F (= 15)可以防止将Windows%PATH%附加到Ubuntu $ PATH。

您仍然可以在0x0D (= 13)下的注册表中找到所有WSL 2发行版。每个发行版都有自己的GUID子文件夹,看起来像

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\

当然,您的GUID与我的不同。

通过单击每个GUID并查看HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\ | |-- {40db8e6f-0520-4ddd-9c8b-0f5414e685c9} |-- {6a61345d-2dc6-4b9e-abb1-28a26d64e19f} |-- {bce2f98a-b234-4749-adbe-7311df078d26} |-- ... |-- {ea808e4e-dc24-4645-aed0-ebd67c871e01} 属性,您可以发现哪个GUID指代WSL 2发行版,请参见下面的屏幕快照(1)。然后只需修改DistributionName值并将其设置为13,请参见屏幕快照中的(2)。如果Flags属性中的值与Flags不同,则没关系,只需将其减小2,就可以了。

enter image description here

答案 3 :(得分:0)

警告:如果您的 WSL2 发行版是在 Windows 版本 17093 之后安装的,请不要像 WSL1 那样将“Flags”regedit 值从 0xf 更改为 0x5。这将在下次关闭/重新启动时破坏您的 WSL2 设置,从而丢失您的所有数据。将其更改为 0xD 可以从您的 unix 路径中删除 NT 路径。