WSL2 终端无法识别 Visual Studio Code

19

当我试图从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


尝试在普通的命令提示符和管理员命令提示符中运行echo %PATH%。代码.exe文件夹是否出现了? - Biswapriyo
C:\Program Files\Microsoft VS Code\bin 在两个地方。 - kDar
看起来问题是我的 C 盘只能在提升的权限下运行。与 VS Code 无关。如果我执行 wsl ls /mnt/c,则会出现“ls:无法访问 '/mnt/c':输入/输出错误”。 - kDar
天啊!“ls: cannot access '/mnt/c': Input/output error”——这是一个真正的 bug。请查看此问题 https://github.com/microsoft/WSL/issues/4377 并等待修复。 - Biswapriyo
5个回答

32

正如@Biswapriyo所提到的,这是一个开放的bug,WSL无法访问Windows C驱动器。 帮助我解决问题的变通方法是这样重新启动WSL:

wsl --shutdown
wsl

1
运作得非常好!并非所有英雄都戴着帽子 (: - mend3
1
这对我也起作用了。我猜在2021年它仍然是一个未解决的问题!(我使用的是Windows 10 Home,版本21H1,Windows Insider)。 - pxc
1
“你试过关掉再重新开启吗?” 我走开,知道这会解决问题 - Dark Hippo

17
  1. 打开管理员权限的PowerShell窗口
wsl --list --version

显示为WSL 2

  1. 进入Linux控制台
wsl
  1. 更改相关文件权限
chmod u+x vscode_dir/code.exe
chmod u+x vscode_dir/bin/code
  1. 创建符号链接
ln -s vscode_dir/bin/code code
mv code ~/.local/bin
  1. 修改 .bashrc 文件,在其中添加以下行:
export PATH="$HOME/.local/bin:$PATH"
  1. source .bashrc 或者重新启动终端。

然后你就可以在wsl2-ubuntu环境或VSCode的终端中愉快地编写代码了。


3
只需要执行第五步并将其添加到我的路径中就足够了。其中 vscode_dir = /mnt/c/Program\ Files/Microsoft\ VS\ Code/bin 需要翻译为“VSCode安装目录为/mnt/c/Program\ Files/Microsoft\ VS\ Code/bin”。 - Maarten
我得到了 ln: failed to create symbolic link 'code': File exists - martin
/root/.local/bin/code: 63: /root/.local/Code.exe: 找不到文件 - martin
我所要做的就是创建一个符号链接 ln -s code /mnt/c/Program\ Files/Microsoft\ VS\ Code/bin/codecode 链接被放置在路径的某个位置。我不需要标记这些文件为可执行文件,它们已经是可执行的了。 - hookenz

1
我的问题是在运行sudo -i后使用了root用户。退出并使用WSL上的普通用户解决了错误。

0
在我的情况下,我正在使用Debian,echo %PATH%没有输出任何内容。
我使用了已解决的github问题建议解决方案的第二部分。
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的贡献


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接