此答案旨在帮助其他人避免在VS Code中为终端使用WSL时花费1-2个小时进行故障排除,并慢慢找到针对常见问题的不同解决方案。它不涉及安装特定的软件包,而是覆盖一些常见的软件包,这些软件包在安装依赖于它们的存在以及修复相关公共设置的东西时可能无法正确安装为依赖项。
步骤摘要
- 已安装WSL
- 为终端配置的VS代码(或其他IDE)
- 在.profile中安装了NPM和路径修复(可能对其他工具有所帮助)
- 已安装build-essential(帮助使用make / gcc / etc的任何工具)
- 使用WSL的VS代码任务
- 附加功能
入门与要求
- 您必须已安装WSL。(这意味着您必须运行具有适当更新的64位Windows 10)(如果尚未安装,请遵循安装指南)。这将需要重新启动。
VS Code终端配置
无论是CTRL+,键盘快捷键,或File
→交通Preferences
→交通Settings
在编辑窗口的右上角,确保您在正确的环境中工作:用户设置或工作区设置。
在设置搜索栏中,键入terminal.integrated.shell.windows
(或使您走得足够远的任何命令)
在实际的设置文件中找到该设置,使用Edit
(将鼠标悬停在该行上,它将显示在左侧:在没有鼠标的触摸屏上,您只需轻击该行的左侧),然后选择Replace in Settings
在右窗格中,修改在修改后的json文件中创建的条目:将以前的设置替换为
"C:\\WINDOWS\\Sysnative\\bash.exe"
其他IDE:IntelliJ
打开设置/工具/终端,然后将“外壳路径”字段设置为 "C:\Users\USERNAME\AppData\Local\Microsoft\WindowsApps\ubuntu.exe"
使WSL Ubuntu Bash Terminal对开发人员起作用
当使用CTRL+`打开终端时,现在应该有一个bash终端。
如果这是您第一次运行bash.exe,则可能会询问您是否安装Ubuntu。这样做。安装完成后,选择要在WSL Ubuntu中使用的用户名和密码。这些密码不必与您当前的Windows帐户一致,请务必注意,它们不会根据Windows帐户密码的更改而更改。
完成后,您的终端将出现一个bash命令提示符。
请注意,与Windows上的git-bash不同,这是一个独立的环境。尽管它可以用来在其外部启动Windows软件,但是您将需要适当的Ubuntu软件包才能在实际终端中运行它们。
当前,WSL尚未加载您可能期望或习惯的所有内容,并且某些情况可能会基于默认配置文件设置与您在Windows中加载的软件发生冲突。
更新和git
注意:对于那些只需要这些内容的人,我将把它们作为sudo进行记录,但是开始时的一种选择是改为sudo su
简单地运行以下命令而不使用sudo。
确保您的Ubuntu软件包是最新的:
sudo apt-get -y update
sudo apt-get -y upgrade
sudo apt-get -y dist-upgrade
sudo apt autoremove
安装git:
sudo apt-get install git
Node.js和NPM
如果您已经在Windows中加载了Node或NPM,则由于路径问题而在Ubuntu中运行它们可能会出现问题。因此,您需要安装Ubuntu本机版本并确保使用它们。
首先,与NPM安装的node.js。(替代:安装NVM并使用它来安装node.js)
安装后,运行npm命令可能会失败:例如,npm -v
可能会给您:
: not foundram Files/nodejs/npm: 3: /mnt/c/Program Files/nodejs/npm:
: not foundram Files/nodejs/npm: 5: /mnt/c/Program Files/nodejs/npm:
/mnt/c/Program Files/nodejs/npm: 6: /mnt/c/Program Files/nodejs/npm: Syntax error: word unexpected (expecting "in")
这是由于一个相当简单的解决方案存在路径问题。使用您喜欢的CLI编辑器(如nano
,vim
,emacs
,cat
和sed
...等),打开你的~/.profile
nano ~/.profile
注意:请勿尝试使用Windows工具编辑Linux文件。(感谢@ david-c-rankin对官方链接的评论,并用红色粗体解释了这一点)如果您不想在终端中使用CLI编辑器,请参见本文的底部,以获取有关如何操作的链接。使一个GUI运行。
当前,WSL中的默认bash PATH变量是
PATH="$HOME/bin:$HOME/.local/bin:$PATH"
这是在前两个二进制目录之后注入Windows路径。不幸的是,这不会导致在Windows安装npm之前使用/ usr / bin,因此请将其添加到最后的$ PATH之前:
PATH="$HOME/bin:$HOME/.local/bin:/usr/bin:$PATH"
保存,然后重新加载终端或仅获取路径文件
source ~/.profile
必要的
如果您正在使用任何需要编译的内容,或者使用了make,那么几乎可以肯定您会安装这些内容。因此,如果您在安装node.js时未安装它们,请这样做。简单地使用build-essential软件包比尝试单独安装所有组件要容易得多。
请注意,没有这些,依赖于Ruby FFI的软件包(如Compass)将失败。如果您在正确安装和运行工具时遇到麻烦,请确保已安装gcc并进行make安装是一个不错的起点。
sudo apt-get install -y build-essential
使用Ubuntu运行任务
请注意,如果您使用VS Code的task.json运行构建任务,则默认情况下,它仍将使用Windows子系统而不是Ubuntu子系统运行它们。有时这可能是您想要的,但是如果您刚刚在Ubuntu而非Windows中完成grunt-cli的安装,则可能不是。
VS Code最近在2017年5月更新了Tasks的工作方式,使它可以将TaskRunner设置为终端。到目前为止,这是迁移任务的最简单方法。
简单设置
"runner": "terminal",
在你tasks.json
就大功告成了(假设你把所有的适当的工具,你正在尝试运行已经安装在Ubuntu的WSL)。
这是非常可移植的,理想情况下不需要在具有或没有WSL的系统之间或与其他OS进行任何更改,这是我建议的方法。
目前,此方法产生另一个TERMINAL
选项卡实例(从下拉列表访问)。您仍然可以设置适当的观察者,但这确实意味着它不再位于OUTPUT
选项卡上。
旧方法能够调用WSL Ubunutu Bash Shell并将其显示在中OUTPUT
,并且涉及使用-c参数调用bash.exe或使用Shell脚本。不幸的是,它不是语义上的,因为我们正在bash
执行命令并将其传递给想要作为参数运行的命令。这也意味着它不能很快移植到其他系统。
您可以为终端本身使用先前为VS Code指定的位置,C:\\WINDOWS\\Sysnative\\bash.exe
作为command
将args
数组的第一个元素设置为-c
,将第二个元素设置为要运行的命令(记入此答案的后半部分)。
另外,您也可以运行一个shell脚本,如此处所示。
其他有用的位
想从WSL bash命令行在Windows中启动VSCode?
是否希望为您的WSL Ubuntu提供图形界面?(这将允许您执行诸如使用Linux GUI编辑器对Ubuntu系统本身中的文件进行操作:请勿使用Windows编辑工具对其进行编辑,请参阅npm中的注释/注释)
想要构建(请参阅上面的部分,为WSL正确设置VS Code Tasks)并完全在WSL Ubuntu中进行调试?(这显示了如何使用gdb来执行此操作,但是该pipeTransport
概念可以与其他调试器一起使用)(该答案的版权,但之前的内容还提供了一种使用本地环回的方法,该方法可能会有用)