mvn compile
时,它告诉我Maven编译失败。
我使用 which mvn
发现它引用了Win10中安装的Maven。此外,我运行
env
并发现Win10的Path已添加到WSL的Path中。
我不想在使用WSL时使用Win10的Path中的任何内容,该怎么做?mvn compile
时,它告诉我Maven编译失败。
我使用 which mvn
发现它引用了Win10中安装的Maven。env
并发现Win10的Path已添加到WSL的Path中。
我不想在使用WSL时使用Win10的Path中的任何内容,该怎么做?WSL使用每个Linux虚拟机文件系统中的/etc/wsl.conf
文件来配置其行为。如果需要,请创建该文件并将以下配置设置(在此处解释)添加到/etc/wsl.conf
中:
[interop]
appendWindowsPath = false
appendWindowsPath
必须位于[interop]
下。您可能需要使用wsl --shutdown
或wsl -t <Distribution>
关闭当前的WSL实例以使更改生效。您还可以在[interop]
部分下添加选项enabled=false
来禁用从WSL内部启动Windows二进制文件的功能。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
环境变量中。要查找该标志的注册表值,请在注册表编辑器(即regedit.exe
)中打开HKCU\Software\Microsoft\Windows\CurrentVersion\Lxss
。打开每个带有UID值的子键,并将DistributionName
与您安装的发行版名称匹配。然后将Flags
DWORD注册表值编辑/添加为0x5
。
sudo nano /etc/wsl.conf
然后添加
[interop]
appendWindowsPath = false
然后按Ctrl+S
,再按Ctrl+X
,最后按exit
。
将以下代码添加到.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
只需在~/.bashrc
的末尾添加export PATH="$PATH:/usr/bin"
,使得usr/bin
优先于Windows应用程序。但这可能不是一个好的选择。
编辑Windows注册表。目前不建议使用此方法。
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\{GUID}\Flags
将Flags
从7
更改为5
,以排除WSL_DISTRIBUTION_FLAGS_APPEND_NT_PATH
枚举。
简单地重新进入WSL并进行测试:
echo $PATH
以管理员身份运行PowerShell:
Restart-Service LxssManager
使用管理员权限的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
wsl.conf
可用,但选项appendWindowsPath
仅适用于Insider Build 17713及更高版本。 - what the警告:如果您的WSL2发行版是在Windows版本17093之后安装的,请勿将“Flags” regedit值从0xf更改为0x5,就像WSL1的情况一样。这将在下次关闭/重启时破坏您的WSL2设置,导致所有数据丢失。将其更改为0xD将起作用以从您的unix路径中删除NT路径。
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并查看DistributionName
属性,您可以找出哪个GUID指代了什么WSL 2发行版,参见下方截图中的(1)。然后简单地修改Flags
值并将其设置为13,参见下方截图中的(2)。如果Flags
属性中的值与0x0F
不同,那么也无关紧要,只需将其减少2即可。
17763.1875
上使用WSL1,根据我的情况需要进行注册表编辑。 - Nick