How to remove the Win10's PATH from WSL
我在Win10中使用Windows子系统Linux(Ubuntu 18.04),并在其中安装了Maven。
此外,我之前在Win10中安装了一个Maven。
现在,当我在WSL中使用
我使用
此外,我运行
使用WSL时,我不想在Win10的路径中使用任何东西,该怎么办?
-
对于低于17713的Windows版本:WSL使用WSL_DISTRIBUTION_FLAGS枚举配置其行为和Windows与Linux端之间的互操作性。这是
wslapi.h 头文件中的代码段。1
2
3
4
5
6
7
8
9
10
11/* 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版本高于17713:在新版本中,WSL使用
wsl.conf 文件配置其行为以及Windows和Linux端之间的互操作性。该wsl.conf 文件遵循INI文件格式。运行wsl.exe 或bash.exe 。创建文件/etc/wsl.conf 。然后,在Linux中的任何文本编辑器中添加以下interop部分。1
2
3[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 环境变量中。
第一步-在WSL上禁用Windows路径
选项A:添加到wsl.conf(在内部版本17093之后)
1 | sudo nano /etc/wsl.conf |
然后添加
1 2 | [interop] appendWindowsPath = false |
然后
选项B:在运行时删除路径
将以下代码添加到
1 | PATH=$(/usr/bin/printenv PATH | /usr/bin/perl -ne 'print join(":", grep { !/\\/mnt\\/[a-z]/ } split(/:/));') |
替代(运行一次!):
1 2 3 | echo"export PATH=`echo $PATH | tr ':' '\ ' | grep -v /mnt/ | tr '\ ' ':'`">> ~/.bashrc |
替代2
只需将
选项C:
编辑Windows注册表。当前不建议使用。
1 | HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Lxss\\{GUID}\\Flags |
将
第二步-重新启动WSL
选项A:
重新输入WSL并测试:
1 | echo $PATH |
选项B:
以管理员身份在PowerShell上运行:
1 | Restart-Service LxssManager |
选项C:
使用
从PowerShell以管理员身份终止WSL
1 | wslconfig /t Ubuntu |
适应是您的需要,在我的情况下
参考文献:
https://github.com/microsoft/WSL/issues/1493
https://devblogs.microsoft.com/commandline/automatically-configuring-wsl
https://gist.github.com/ilbunilcho/4280bd55a10cefef75e74986b6bff936
在Windows注册表中修改
您仍然可以在注册表中的
1 2 3 4 5 6 7 | 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与我的不同。
通过单击每个GUID并查看