当我试图从WSL执行代码,比如这样:
cmd.exe
wsl code .
我遇到了以下错误:
/bin/bash: code: command not found
然而,如果我以管理员身份运行cmd.exe,再执行相同的命令,vscode将按预期打开。
问题是为什么在非管理员模式下运行时无法识别“code”,我该如何解决?
附加信息: WSL2版本41959 vscode版本1.38 vscode Remote WSL扩展版本0.39.5
当我试图从WSL执行代码,比如这样:
cmd.exe
wsl code .
我遇到了以下错误:
/bin/bash: code: command not found
然而,如果我以管理员身份运行cmd.exe,再执行相同的命令,vscode将按预期打开。
问题是为什么在非管理员模式下运行时无法识别“code”,我该如何解决?
附加信息: WSL2版本41959 vscode版本1.38 vscode Remote WSL扩展版本0.39.5
正如@Biswapriyo所提到的,这是一个开放的bug,WSL无法访问Windows C驱动器。 帮助我解决问题的变通方法是这样重新启动WSL:
wsl --shutdown
wsl
wsl --list --version
显示为WSL 2
wsl
chmod u+x vscode_dir/code.exe
chmod u+x vscode_dir/bin/code
ln -s vscode_dir/bin/code code
mv code ~/.local/bin
.bashrc
文件,在其中添加以下行:export PATH="$HOME/.local/bin:$PATH"
source .bashrc
或者重新启动终端。然后你就可以在wsl2-ubuntu环境或VSCode的终端中愉快地编写代码了。
ln: failed to create symbolic link 'code': File exists
。 - martinln -s code /mnt/c/Program\ Files/Microsoft\ VS\ Code/bin/code
。code
链接被放置在路径的某个位置。我不需要标记这些文件为可执行文件,它们已经是可执行的了。 - hookenzsudo -i
后使用了root用户。退出并使用WSL上的普通用户解决了错误。For Debian, /etc/profile contributed to this problem.
Here is the path definition in /etc/profile
if [ "`id -u`" -eq 0 ]; then
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
fi
选项 1:
You can delete above lines, then wsl --shutdown to restart Debian.
选项2:
If you would like to keep these lines, you can also append ":$PATH" to each path like below, then wsl --shutdown
if [ "`id -u`" -eq 0 ]; then
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH"
else
PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:$PATH"
fi
感谢licanchua的贡献
/etc/wsl.conf
,看看appendWindowsPath
设置是否与WSL共享Windows PATH,并且它是否专门设置了特定用户。
echo %PATH%
。代码.exe文件夹是否出现了? - Biswapriyo