我在Win10中使用Windows Subsystem Linux(Ubuntu18.04),并在其中安装了Maven。此外,我以前在Win10中安装了maven。现在,当我在WSL中使用mvn compile时,它告诉我maven编译失败。我使用which mvn,发现它引用了安装在Win10中的Maven.
此外,我运行env,发现win10的路径被添加到WSL的路径中。当我使用WSL时,我不想使用Win10路径中的任何东西,我应该怎么做?
发布于 2018-07-15 14:30:46
Windows低于17713版本:使用WSL_DISTRIBUTION_FLAGS Enumeration配置其行为和Windows端与Linux端的互操作性。下面是来自wslapi.h头文件的代码片段。
指定WSL行为*/ /*枚举的类型标志{ 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)
在第一次启动时,ws1使用默认标志= 0x7 (即0+1+2+4)。如果该标志= 0x5 (即0+1+4),Windows NT路径将不会追加到$PATH环境变量中。那么,如何找到标志注册表值呢?在注册表编辑器中打开HKCU\Software\Microsoft\Windows\CurrentVersion\Lxss注册表路径。regedit.exe。打开每个具有UID值的子项,并将DistributionName与您安装的发行版名称进行匹配。然后在0x5.中编辑/添加Flags DWORD值
Windows HIGHER than 17713:在新的构建中,使用wsl.conf file来配置它的行为以及Windows端和Linux端的互操作性。该wsl.conf文件遵循INI file format。运行wsl.exe或bash.exe。创建一个文件/etc/wsl.conf。然后使用Linux中的任意文本编辑器添加以下interop section。
interop enabled=false #启用启动Windows二进制文件;默认值为true appendWindowsPath=false #将Windows路径追加到$PATH变量;默认值为true
保存该文件并退出wsl.exe。现在,无论何时执行WSL,Windows路径都不会附加到Linux $PATH环境变量中。
正如AndrewBourgeois提到的,您可能需要使用wsl --shutdown或wsl -t <Distribution>关闭wsl的当前实例,以使更改生效。
发布于 2020-08-01 00:46:35
第1步-禁用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 ':' '\n' | grep -v /mnt/ | tr '\n' ':'`" >> ~/.bashrcAlternative 2
只需将export PATH="$PATH:/usr/bin"添加到~/.bashrc的末尾,这样usr/bin就可以优先于windows的应用程序。可能不是一个好的选择。
选项C:
编辑Windows注册表。目前不推荐这样做。
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\{GUID}\Flags将Flags从7更改为5,以便排除WSL_DISTRIBUTION_FLAGS_APPEND_NT_PATH枚举。
第2步-重新启动WSL
选项A:
简单地重新输入WSL并测试:
echo $PATH选项B:
以管理员身份在PowerShell上运行:
Restart-Service LxssManager选项C:
以管理员身份从PowerShell终止ws1
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
发布于 2021-06-18 05:35:01
警告:如果您的WSL2发行版是在Windows build 17093之后安装的,请不要像WSL1那样将"Flags“regedit值从0xf更改为0x5。这将在下次关机/重新启动时破坏您的WSL2设置,丢失所有数据。将其更改为0xD将从unix路径中删除NT路径。
https://stackoverflow.com/questions/51336147
复制相似问题