如何在我的VS Code终端上使用Windows上的Ubuntu(WSL)上的Bash?

tas*_*wyn 85 git bash ubuntu visual-studio-code windows-subsystem-for-linux

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

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

与git-bash不同,遗憾的是,这不是那么简单,因为WSL中的Ubuntu Linux配置可以提供一些陷阱,例如NPM尝试(和失败)从Windows Program Files目录运行,因为WSL和Windows本身之间的交互路径的条款,以及一些像Compass这样的软件包失败的原因并不一定是那些不习惯在Linux上开发的人的明显原因.为VS Code提供可靠的WSL终端环境的简单方法是什么?在通过apt-get或安装时最常用的工具将运行npm

tas*_*wyn 177

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

步骤摘要

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

入门和要求

VS代码终端配置

无论是CTRL+ ,键盘快捷键,或File→交通Preferences→交通Settings

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

在此输入图像描述

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

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

在此输入图像描述

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

"C:\\WINDOWS\\Sysnative\\bash.exe"
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

其他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
Run Code Online (Sandbox Code Playgroud)

安装git:

sudo apt-get install git
Run Code Online (Sandbox Code Playgroud)

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")
Run Code Online (Sandbox Code Playgroud)

这是由于一个相当简单的解决方案路径问题.使用您喜欢的CLI编辑器(如nano,vim,emacs,catsed...等),打开你的~/.profile

nano ~/.profile
Run Code Online (Sandbox Code Playgroud)

注意:请勿尝试使用Windows工具编辑Linux文件.(感谢@ david-c-rankin对官方链接的评论,其中大胆的红色文字解释了这一点)如果您不想在终端中使用CLI编辑器,请参阅本文的底部以获取有关如何使用的链接让GUI运行一个.

目前,WSL中的默认bash PATH变量是

PATH="$HOME/bin:$HOME/.local/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)

这是在前两个二进制目录之后注入Windows路径.不幸的是,这不会导致在windows安装npm之前使用/ usr/bin,所以在最终的$ PATH之前添加:

PATH="$HOME/bin:$HOME/.local/bin:/usr/bin:$PATH"
Run Code Online (Sandbox Code Playgroud)

保存,然后重新加载终端或只是源路径文件

source ~/.profile
Run Code Online (Sandbox Code Playgroud)

建立必要的

如果您使用任何需要编译或以其他方式使用make的东西,几乎可以保证您需要安装这些; 因此,如果您在安装node.js时未安装它们,请执行此操作.简单地使用构建必需的包而不是尝试单独安装所有内容要容易得多.

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

sudo apt-get install -y build-essential
Run Code Online (Sandbox Code Playgroud)

使用Ubuntu运行任务

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

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

简单的设置

"runner": "terminal",
Run Code Online (Sandbox Code Playgroud)

在你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概念可以和其他调试器一起使用)(相信这个答案,但之前的那个还提供了一个使用本地环回的方法,可能证明是有用的)

  • 很好的答案,提供通知也很有用[**不要使用Windows应用程序和工具更改Linux文件**](https://blogs.msdn.microsoft.com/commandline/2016/11/17/do-新的WSL用户不要改变linux-files-using-windows-apps-and-tools /.这可能会让人感到意外. (10认同)
  • @ChangQian的原因是,当64位Windows发布时,他们为32位程序添加了一个文件系统重定向器,因为System32是为64位dll /软件保留的.这导致32位应用程序尝试访问System32而不是访问SysWOW64(是的,它似乎向后).Sysnative迫使这种情况不会发生,但不会像资源管理器那样出现在64位软件中.您可以使用32位命令提示符查看此示例:`C:\ Windows\SysWOW64\cmd.exe`并运行`dir C:\ Windows\Sysnative`*这适用于64位VSCode,因为它已编码为自动翻译 (3认同)
  • 当您将终端设置为“ ubuntu.exe”时,您可能最终会出现在用户文件夹而不是项目文件夹中。这就是为什么要根据https://github.com/Microsoft/WSL/issues/2795将终端设置为`C:\\ Windows \\ System32 \\ wsl.exe`使用`wslconfig / setdefault Ubuntu`进行创建的原因确保正确的安装开始。 (2认同)

小智 5

如果要使用 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",
Run Code Online (Sandbox Code Playgroud)