起因
最近使用WSL2折腾linux命令行的软件,在使用thefuck(一个自动修正上一个错误命令的软件)的时候,发现输入fuck
的时候,需要等很长的一段时间…
经过搜索,发现是因为WSL默认是把Windows的系统PATH环境变量加入到Linux里面了,导致每次运行命令时要遍历linux和windows的PATH,能不慢么 …
不信你可以cat $PATH
试试🤣
于是乎又去各种地方寻找解决方案,总结一下两种:
解决方案1 : WSL全局忽略Windows PATH变量
Windows 17093 之后的版本
修改/etc/wsl.conf
添加上:
1 | [interop] |
重新进入WSL;
然后输入 cat $PATH
;
如果Windows的PATH变量还存在的话,那在PowerShell里输入:
Restart-Service LxssManager
或者
1 | wsl.exe --list |
(前一个命令用来显示wsl的distro_name )
这个解决方案算不上好,因为去掉了win的环境变量的话,windows上很多与WSL互联的应用都会失效(比如VSCode的远程连接WSL)。
但是它的适用范围更广,无论是哪个需要用到path的软件,都可以加快速度,一劳永逸。
想要添加回来的话就把false改成true 然后重复操作就行了
全版本适用(大概)
在你的shell的run commands文件(如.bashrc
)中添上以下命令:
1 | PATH=$(/usr/bin/printenv PATH | /usr/bin/perl -ne 'print join(":", grep { !/\/mnt\/[a-z]/ } split(/:/));') |
然后source 你的rc文件
从而在每次启动shell时将win的path去除;
重启wsl即可。
解决方案2 : 通过软件自身设置忽略Win环境变量
这个解决方案最好,但我把它放第二个是因为不是每个软件都会专门为wsl这一特性做优化
就拿thefuck这个软件来举例:
有人在作者github repo的issue里提到了等待时间过长这个问题
于是乎作者在某个版本将忽略路径这一功能加上了,还在Wiki给出了解决方法
由于软件解决这一问题的方法不统一,所以只能自行到软件的Wiki/Github寻找WSL关键字或者StackOverflow走起😑
吐槽
WSL2我只能说又爱又恨;
一方面它和Windows融合,比双系统体验好很多;
另一方面微软又总喜欢搞些特殊,总会有这样那样的问题,只能说爱折腾才会去用WSL2🙄