Linux WSL路径包含windows目录,如何(优雅地)修复它以仅排除某些目录?

Linux WSL路径包含windows目录,如何(优雅地)修复它以仅排除某些目录?,linux,windows,path,windows-subsystem-for-linux,Linux,Windows,Path,Windows Subsystem For Linux,我一直在修补WSL2,发现在尝试使用某些软件时,例如gcloud,我遇到了一个恼人的不便 $gcloud /mnt/c/googlecloudsdk/bin/gcloud:113:exec:python:未找到 这是因为WSL中的PATH变量默认设置为包含一些windows目录。如果我们检查它,我们可以在设置的目录中找到/mnt/c/google cloud sdk/bin/gcloud: $echo$PATH | grep/mnt/c/google cloud sdk/bin/ /usr/l

我一直在修补WSL2,发现在尝试使用某些软件时,例如
gcloud
,我遇到了一个恼人的不便

$gcloud
/mnt/c/googlecloudsdk/bin/gcloud:113:exec:python:未找到
这是因为WSL中的
PATH
变量默认设置为包含一些windows目录。如果我们检查它,我们可以在设置的目录中找到
/mnt/c/google cloud sdk/bin/gcloud

$echo$PATH | grep/mnt/c/google cloud sdk/bin/
/usr/local/sbin:/usr/local/bin:/usr/bin:/sbin:/usr/games:/usr/local/games:/mnt/c/Program Files(x86)/Microsoft SDKs/Azure/CLI2/wbin:/mnt/c/Windows/system32:/mnt/c/Windows:/mnt/c/system32/Wbem:/mnt/c/Windows/system32/windowpowershell/v1.0/:/mnt/c/Windows/system32/ssh/:/mnt/c/google cloud sdk/bin/:/(x86)/Microsoft SQL Server/150/DTS/Binn/:/mnt/c/WINDOWS/system32:/mnt/c/WINDOWS:/mnt/c/WINDOWS/system32/Wbem:/mnt/c/WINDOWS/system32/WindowsPowerShell/v1.0/:/mnt/c/WINDOWS/system32/OpenSSH/:/mnt/c/程序文件/Docker/resources/bin:/mnt/c/ProgramData/DockerDesktop/version bin:/mnt/c/Users/iyid/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/iyid/AppData/Local/Programs/Microsoft VS Code/bin:/snap/bin
我可以理解为什么会有一些windows目录,比如
/mnt/c/Program Files/Docker/Docker/resources/bin
,或者
/mnt/c/Users/iyid/AppData/Local/Programs/Microsoft VS code/bin
,因为我使用它们,但是当
gcloud
无法“开箱即用”时,为什么要包含它

因此,一个难看的解决方法是只导出一个新的
PATH
变量,该变量不包括
gcloud
目录,并将其添加到用户和根主目录中的
.bashrc
。请注意,在替换PATH变量时,我需要手动在目录周围设置双引号
,其中包含空格,例如
”/mnt/c/Users/iyid/AppData/Local/Programs/Microsoft VS Code/bin"
,这使得修复程序更加丑陋。如果我安装了一些其他软件,并且需要在
路径
变量中包含其二进制文件,该怎么办?我是否应该在
.bashrc
中堆积路径更新指令?如果我以后想使用
zsh
,并且我必须将所有指令切换到
.zshrc
?等等……所有的问题都解决了这些问题使得此解决方案纯粹是一种“变通方法”,涉及大量维护开销


有没有更优雅的方法来解决这个问题?

事实上,一次替换PATH变量似乎效果很好,因为它可以为用户修改windows的环境变量,但系统变量保持不变。因此,我只需要更改一次,而不需要将其放在
.bashrc
中,这样,我就可以在两种en中获得
gcloud
环境:WSL和Windows