首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从WSL中删除Win10的路径

如何从WSL中删除Win10的路径
EN

Stack Overflow用户
提问于 2018-07-14 15:06:33
回答 4查看 17K关注 0票数 35

我在Win10中使用Windows Subsystem Linux(Ubuntu18.04),并在其中安装了Maven。此外,我以前在Win10中安装了maven。现在,当我在WSL中使用mvn compile时,它告诉我maven编译失败。我使用which mvn,发现它引用了安装在Win10中的Maven.

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

EN

回答 4

Stack Overflow用户

发布于 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.exebash.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 --shutdownwsl -t <Distribution>关闭wsl的当前实例,以使更改生效。

票数 69
EN

Stack Overflow用户

发布于 2020-08-01 00:46:35

第1步-禁用WSL上的Windows路径

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

代码语言:javascript
复制
sudo nano /etc/wsl.conf

然后添加

代码语言:javascript
复制
[interop]
appendWindowsPath = false

然后是Ctrl+S,然后是Ctrl+X,然后是exit

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

将以下代码添加到.bashrc

代码语言:javascript
复制
PATH=$(/usr/bin/printenv PATH | /usr/bin/perl -ne 'print join(":", grep { !/\/mnt\/[a-z]/ } split(/:/));')

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

代码语言:javascript
复制
echo "export PATH=`echo $PATH | tr ':' '\n' | grep -v /mnt/ | tr '\n' ':'`" >> ~/.bashrc

Alternative 2

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

选项C:

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

代码语言:javascript
复制
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Lxss\{GUID}\Flags

Flags7更改为5,以便排除WSL_DISTRIBUTION_FLAGS_APPEND_NT_PATH枚举。

第2步-重新启动WSL

选项A:

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

代码语言:javascript
复制
echo $PATH

选项B:

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

代码语言:javascript
复制
Restart-Service LxssManager

选项C:

以管理员身份从PowerShell终止ws1

代码语言:javascript
复制
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

票数 30
EN

Stack Overflow用户

发布于 2021-06-18 05:35:01

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51336147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档