【问题标题】:WSL2 terminal does not recognize Visual Studio CodeWSL2 终端无法识别 Visual Studio Code
【发布时间】:2020-01-12 02:27:33
【问题描述】:

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

cmd.exe
wsl code .

我收到以下错误:

/bin/bash: code: command not found

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

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

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

【问题讨论】:

  • 尝试在普通cmd和admin cmd中运行echo %PATH%。出现code.exe文件夹了吗?
  • C:\Program Files\Microsoft VS Code\bin 都在
  • 似乎问题在于安装我的 C 驱动器只能使用提升的权限。与VS代码无关。如果我执行 wsl ls /mnt/c 我得到“ls: cannot access '/mnt/c': Input/output error”
  • 天啊! "ls: cannot access '/mnt/c': Input/output error" -- 是一个真正的错误。请参阅此问题github.com/microsoft/WSL/issues/4377 并等待它修复。

标签: visual-studio-code windows-subsystem-for-linux vscode-remote


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    在我的情况下,我使用的是 Debian,并且 echo %PATH% 没有输出任何内容。

    我使用了来自resolved github issue的建议解决方案的第二部分

    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

    【讨论】:

      【解决方案3】:
      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的终端中愉快的玩代码了。

      【讨论】:

      • where vscode_dir = /mnt/c/Program\ Files/Microsoft\ VS\ Code/bin 只需执行第 5 步并将其添加到我的路径中就足够了。
      • 我收到ln: failed to create symbolic link 'code': File exists
      • /root/.local/bin/code: 63: /root/.local/Code.exe: 未找到
      • 我所要做的就是创建一个符号链接ln -s code /mnt/c/Program\ Files/Microsoft\ VS\ Code/bin/codecode 链接放置在路径中的某处。我不需要将这些文件标记为可执行文件,它们已经是。
      【解决方案4】:

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

      wsl --shutdown
      wsl
      

      【讨论】:

      • 工作就像一个魅力!并非所有英雄都戴帽子(:
      • 这对我也有用。我想这在 2021 年仍然是一个悬而未决的问题! (我使用的是 Windows 10 Home,版本 21H1,Windows Insider)。
      • “您是否尝试将其关闭再打开?” 我知道这会解决问题而离开
      猜你喜欢
      • 2020-04-01
      • 1970-01-01
      • 2018-05-01
      • 1970-01-01
      • 2021-09-02
      • 2016-01-23
      • 1970-01-01
      • 2022-01-18
      • 2020-08-09
      相关资源
      最近更新 更多