15

当我尝试从 WSL 执行代码时,如下所示:

cmd.exe
wsl code .

我收到以下错误:

/bin/bash: code: command not found

但是,如果我执行相同的命令但首先以管理员身份运行 cmd.exe,vscode 会按预期打开。

问题是为什么当我以非管理员身份运行时无法识别“代码”,我该如何解决?

附加信息:WSL2 版本 41959 vscode 版本 1.38 vscode 远程 WSL 扩展版本 0.39.5

4

4 回答 4

29

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

wsl --shutdown
wsl
于 2019-09-11T10:25:49.537 回答
13
  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的终端玩代码了。

于 2020-07-19T04:44:34.707 回答
2

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

于 2021-10-06T12:35:17.237 回答
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

谢立川

于 2021-03-08T07:40:30.387 回答