如何从WSL中删除Win10的PATH

Sin*_*tos 11 linux path maven windows-10 windows-subsystem-for-linux

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

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

ins*_*ign 26

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

选项 A:添加到 wsl.conf(在 Build 17093 之后)

sudo nano /etc/wsl.conf
Run Code Online (Sandbox Code Playgroud)

然后加

[interop]
appendWindowsPath = false
Run Code Online (Sandbox Code Playgroud)

然后 Ctrl+S然后Ctrl+X然后exit

选项 B:在运行时删除路径

将以下代码添加到 .bashrc

PATH=$(/usr/bin/printenv PATH | /usr/bin/perl -ne 'print join(":", grep { !/\/mnt\/[a-z]/ } split(/:/));')
Run Code Online (Sandbox Code Playgroud)

替代方案(运行一次!):

echo "export PATH=`echo $PATH | tr ':' '\n' | grep -v /mnt/ | tr '\n' ':'`" >> ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

备选方案 2

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

选项 C:

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

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\{GUID}\Flags
Run Code Online (Sandbox Code Playgroud)

改变Flags来自75以排除WSL_DISTRIBUTION_FLAGS_APPEND_NT_PATH枚举。


第二步 - 重启 WSL

选项A:

简单的重新输入 WSL 并测试:

echo $PATH
Run Code Online (Sandbox Code Playgroud)

选项 B:

以管理员身份在 PowerShell 中运行:

Restart-Service LxssManager
Run Code Online (Sandbox Code Playgroud)

选项 C:

使用 Admin 以管理员身份从 PowerShell 终止 WSL

wslconfig /t Ubuntu
Run Code Online (Sandbox Code Playgroud)

Ubuntu-18.04我而言,适应是您的需要


参考:

https://github.com/microsoft/WSL/issues/1493

https://devblogs.microsoft.com/commandline/automatically-configuring-wsl

https://gist.github.com/ilbunilcho/4280bd55a10cefef75e74986b6bff936


Bis*_*iyo 22

  • 对于Windows版本低于17713的Windows版本:WSL使用WSL_DISTRIBUTION_FLAGS枚举来配置它在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)
Run Code Online (Sandbox Code Playgroud)

首次启动时,WSL使用默认标志= 0x7(即0 + 1 + 2 + 4).如果该标志= 0x5(即0 + 1 + 4),则Windows NT路径不会附加在$PATH环境变量中.那么,如何找到那个flags注册表值呢?HKCU\Software\Microsoft\Windows\CurrentVersion\Lxss在注册表编辑器中打开注册表路径.regedit.exe.使用UID值打开每个子项,并DistributionName与您安装的分发名称匹配.然后编辑/添加FlagsDWORD注册表值0x5.

  • 对于Windows版本高于17713:在新版本中,WSL使用wsl.conf文件来配置Windows和Linux端之间的行为和互操作性.该wsl.conf文件遵循INI文件格式.跑wsl.exebash.exe.创建一个文件/etc/wsl.conf.然后在Linux中使用任何文本编辑器添加以下互操作部分.
[interop]
enabled=false # enable launch of Windows binaries; default is true
appendWindowsPath=false # append Windows path to $PATH variable; default is true
Run Code Online (Sandbox Code Playgroud)

保存该文件并退出wsl.exe.现在,只要执行WSL,Windows路径就不会附加到Linux $PATH环境变量.

  • 在 WSL 中修改“wsl.conf”文件后,您需要“wsl --shutdown”以使更改生效。 (10认同)
  • 后者并不完全适合我。尽管它是一个 ini 文件,但我删除了所有注释(# 之后,包括 #),并在“=”周围放置空格。要重新启动 WSL,您还可以 ctrl-x->powershell(admin) 并运行“Restart-Service LxssManager”。 (2认同)