繁体   English   中英

如何将 Bash on Ubuntu on Windows (WSL) 用于我的 VS Code 终端?

[英]How do I use Bash on Ubuntu on Windows (WSL) for my VS Code terminal?

虽然其他问题涉及如何使用 git-bash 之类的东西,但作为 VS Code 的终端让新的 WSL 旋转是不一样的:它使您可以访问运行在实际 Ubuntu Linux 子系统上的 bash,而不是 git-在 Windows 子系统上运行的 bash 终端。

那么我们如何让它作为 VS 代码终端工作,特别是我们如何让它作为功能性开发环境终端工作呢?

与 git-bash 不同,不幸的是,这并不那么简单,因为 WSL 中的 Ubuntu Linux 配置可以提供一些陷阱,例如 NPM 尝试(并且失败)由于 WSL 与 Windows 本身之间的交互而从您的 Windows Program Files 目录运行路径方面,以及某些包(例如 Compass)失败的原因对于不习惯在 Linux 上开发的人来说不一定是显而易见的原因。什么是为 VS Code 提供可靠的 WSL 终端环境的简单方法,其中最常用的工具将通过apt-getnpm安装时运行?

这个答案旨在帮助其他人避免花费1-2个小时进行故障排除,并在VS Code中为终端使用WSL时慢慢找到针对常见问题的不同解决方案。 它不包括安装特定软件包,而是在安装依赖于它们存在的东西时可能无法正确安装的常见软件包,以及修复相关的常用设置。

步骤摘要

  • 安装WSL
  • 为终端配置的VS代码(或其他IDE)
  • NPM安装和路径修复 .profile(可能有助于其他工具)
  • build-essential安装(帮助使用make / gcc / etc的任何工具)
  • 使用WSL的VS代码任务
  • 附加功能

入门和要求

  • 您必须安装WSL (这意味着您必须运行64位 Windows 10,并提供相应的更新)如果尚未安装, 按照安装指南进行操作 这将需要一些重新启动。

VS代码终端配置

CTRL + 键盘快捷键或FilePreferencesSettings

在编辑窗口的右上角,确保您在正确的上下文中工作: 用户设置工作区设置

在此输入图像描述

在设置搜索栏中,键入terminal.integrated.shell.windows (或任何让你足够长的东西)

在实际设置文件中找到设置,使用Edit (鼠标悬停在线上,它将在左侧:在没有鼠标的触摸屏上,您应该只需点击线的左侧),然后选择Replace in Settings

在此输入图像描述

在右窗格中,修改在已修改的json文件中创建的条目:将以前的设置替换为

"C:\\WINDOWS\\Sysnative\\bash.exe"

在此输入图像描述

其他IDE:IntelliJ

打开设置/工具/终端并将“Shell路径”字段设置为"C:\\Users\\USERNAME\\AppData\\Local\\Microsoft\\WindowsApps\\ubuntu.exe"

使您的WSL Ubuntu Bash终端功能正常

当您使用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编辑器(如nanovimemacscatsed等),打开你的~/.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时未安装它们,请执行此操作。 简单地使用构建必需的包而不是尝试单独安装所有内容要容易得多。

请注意,如果没有这些,依赖于Ruby FFI的Compass等软件包将会失败。 如果您在正确安装和运行工具时遇到问题,确保安装gcc和make是一个很好的起点。

sudo apt-get install -y build-essential

使用Ubuntu运行任务

请注意,如果您使用VS Code的tasks.json来运行构建任务,默认情况下它仍将使用Windows子系统而不是Ubuntu子系统运行它们。 有时候这可能就是你想要的,但是如果你刚刚在Ubuntu而不是Windows中安装了grunt-cli,它可能不是。

VS Code最近有2017年5月更新的任务工作方式,允许它将任务运行器设置为终端 到目前为止,这是迁移任务的最简单方法。

简单的设置

"runner": "terminal",

在您的tasks.json ,您已经完成了(假设您已经在WSL Ubuntu中安装了所有正在尝试运行的相应工具)。 在此输入图像描述

这是非常便携的,理想情况下不需要在没有WSL的系统或其他操作系统之间进行任何更改,这是我建议的方法。

目前,此方法产生另一个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提供图形界面吗? (这将允许您为Ubuntu系统的文件使用Linux GUI编辑器这样的事情:不要使用Windows编辑工具编辑它们,请参阅npm部分的注释/注释)

想要构建(参见上面关于为WSL正确设置VS代码任务的部分)并在WSL Ubuntu中完全调试 (这显示了如何使用gdb,但pipeTransport概念可以与其他调试器一起使用)(相信这个答案 ,但之前的那个还提供了一个使用本地环回的方法,可能证明是有用的)

如果你想使用zsh,找到ubuntu1804.exe或ubuntu1604.exe的路径。

在我的情况下

"terminal.external.windowsExec": "C:\\Users\\asdf\\AppData\\Local\\Microsoft\\WindowsApps\\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\\ubuntu1804.exe",
"terminal.integrated.shell.windows": "C:\\Users\\asdf\\AppData\\Local\\Microsoft\\WindowsApps\\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\\ubuntu1804.exe",

现在您可以使用Microsoft的WSL扩展

已接受的答案现已在较新版本的 VSCode 中弃用。 现在执行此操作的正确方法是配置terminal.integrated.profiles.windows设置。

这应该配置终端配置文件的 JSON 个对象。 例如,要配置 WSL,您将使用以下设置:

"terminal.integrated.profiles.windows": {
  "Ubuntu": {
    "path": "wsl.exe"
  }
},

如果这不起作用,请尝试使用 WSL 的完整路径(默认情况下应为C:\\Windows\\System32\\wsl.exe

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM