如何在 Ubuntu on Windows (WSL) 上为我的 VS Code 终端使用 Bash?
Posted
技术标签:
【中文标题】如何在 Ubuntu on Windows (WSL) 上为我的 VS Code 终端使用 Bash?【英文标题】:How do I use Bash on Ubuntu on Windows (WSL) for my VS Code terminal? 【发布时间】:2017-11-11 00:35:20 【问题描述】:虽然其他问题涉及how to use things like git-bash,但将新的 WSL 作为 VS Code 的终端进行旋转是不一样的:它使您可以访问在实际 Ubuntu Linux 子系统上运行的 bash,而不是 git-bash 终端在 Windows 子系统上运行。
那么我们如何让它作为 VS Code 终端运行,尤其是如何让它作为一个功能开发环境终端运行呢?
与 git-bash 不同,不幸的是,这并不简单,因为 WSL 中的 Ubuntu Linux 配置可能会提供一些陷阱,例如由于 WSL 和Windows 本身在路径方面,以及 Compass 等一些软件包失败,对于不习惯在 Linux 上进行开发的人来说,这不一定是显而易见的原因。有什么简单的方法可以为 VS Code 提供可靠的 WSL 终端环境,在通过 apt-get
或 npm
安装时,最常用的工具将在其中运行?
【问题讨论】:
【参考方案1】:此答案旨在帮助其他人避免在 VS Code 中将 WSL 用于终端时花费 1-2 小时进行故障排除并慢慢找到针对常见问题的不同解决方案。它不包括安装特定的包,而是在安装确实依赖于它们的存在的东西时可能无法正确安装为依赖项的常见包,以及修复相关的常见设置。
步骤总结
已安装 WSL 为终端配置的 VS Code(或其他 IDE) 在 .profile 中安装了 NPM 和 路径修复(可能对其他工具有帮助) 已安装 build-essential(有助于使用 make/gcc/etc 的任何工具) 使用 WSL 的 VS 代码任务 附加功能入门和要求
您必须have WSL installed。 (这意味着您必须运行 64 位 Windows 10,并带有适当的更新)如果尚未安装,请关注 install guide。这将需要重新启动。VS Code 终端配置
CTRL+, 键盘快捷键,或File
→ Preferences
→ Settings
在编辑窗口的右上角,确保您在正确的环境中工作:用户设置或工作区设置。
在设置搜索栏中,输入terminal.integrated.shell.windows
(或任何能让你足够长的东西)
在实际设置文件中找到设置,使用Edit
(鼠标悬停在左边:在没有鼠标的触摸屏上,你应该可以简单地点击线的左边),然后选择Replace in Settings
在右侧窗格中,修改在修改后的 json 文件中创建的条目:将之前的设置替换为
"C:\\WINDOWS\\Sysnative\\bash.exe"
其他 IDE:IntelliJ
打开设置/工具/终端,将“Shell path”字段设置为"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
并简单地运行以下命令而不须藤。
确保your Ubuntu packages 是最新的:
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 本机版本并确保使用它们。
首先,install node.js with NPM。 (替代:install 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")
这是由于pathing issue with a fairly straightforward solution。使用您喜欢的 CLI 编辑器(例如 nano
、vim
、emacs
、cat
和 sed
... 等),打开您的 ~/.profile
nano ~/.profile
注意:do NOT attempt to edit Linux files using Windows tools.(感谢@david-c-rankin's comment 提供带有粗体红色文本的官方链接)如果您不想在终端中为此使用 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 时没有安装它们,请这样做。简单地使用 the build-essential package 而不是尝试单独安装所有内容要容易得多。
请注意,如果没有这些,依赖 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 月对 Tasks 的工作方式进行了更新,使其能够set the task runner as the terminal。这是迄今为止迁移任务最简单的方法。
简单设置
"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
,将第二个元素设置为您要运行的命令(credit to the second half of this answer)。
或者,您可以改为run a shell script as seen here。
更多有用的信息
想start VSCode in Windows from the WSL Bash command line?
想要graphical interface for your WSL Ubuntu? (这将允许您对 Ubuntu 系统本身内的文件使用 Linux GUI 编辑器:不要使用 Windows 编辑工具编辑它们,请参阅 npm 部分中的 cmets/note)
想要构建(请参阅上面有关为 WSL 正确设置 VS 代码任务的部分)和debug entirely within WSL Ubuntu? (这显示了如何使用 gdb 来执行此操作,但 pipeTransport
概念可以与其他调试器一起使用)(归功于 this answer,但它之前的一个还提供了一种使用本地环回的方法,这可能证明有用)
【讨论】:
好答案,向新的 WSL 用户提供通知 Do not change Linux files using Windows apps and tools 也很有用。这可能会让人大吃一惊。 好文章,谢谢!不知道你是否看过这个,但还有一个registry entry you can make 可以防止Windows PATH 被注入到Bash 中,这对于许多Windows 用户来说可能比手动编辑他们的.profile
更容易。
@ChangQian 这样做的原因是,当 64 位 Windows 发布时,他们为 32 位程序添加了一个文件系统重定向器,因为 System32 是为 64 位 dll/软件保留的。这导致 32 位应用程序尝试访问 System32 而不是访问 SysWOW64(是的,它似乎倒退了)。 Sysnative 强制这种情况不会发生,但不会出现在像 Explorer 这样的 64 位软件* 中。您可以使用 32 位命令提示符查看此示例:C:\Windows\SysWOW64\cmd.exe
并运行 dir C:\Windows\Sysnative
*这适用于 64 位 VSCode,因为它已被编码为自动翻译
当您将终端设置为ubuntu.exe
时,您最终可能会进入用户文件夹而不是项目文件夹。这就是为什么您要根据github.com/Microsoft/WSL/issues/2795 将终端设置为C:\\Windows\\System32\\wsl.exe
使用wslconfig /setdefault Ubuntu
以确保正确的安装开始。
当我写这篇文章的时候,WSL 被更多地锁定了(在发行版选择/等之前)。我有一台安装了全新 Windows 的机器,它至少已更新到 Spring Creator 的版本,所以我最终将真正了解一下各种 cmets 可以做出哪些改进,并尝试回答你的问题,@Narnia。
【参考方案2】:
如果要使用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",
【讨论】:
在 1.32 版本的 Visual Studio 代码和带有 ubuntu 的 WSL 上运行良好。谢谢! 它也适用于 ubuntu2004.exe,谢谢!【参考方案3】:现在您可以使用Microsoft's WSL extension。
【讨论】:
它的名字是:Remote - WSL。链接:marketplace.visualstudio.com/…以上是关于如何在 Ubuntu on Windows (WSL) 上为我的 VS Code 终端使用 Bash?的主要内容,如果未能解决你的问题,请参考以下文章