问题描述
其他问题涉及
在设置搜索栏中,输入 terminal.integrated.shell.windows
让你足够长的时间)
在实际设置文件中找到设置,使用编辑
,它将位于左侧:在没有鼠标的触摸屏上,您应该可以轻松点击该行的左侧),然后选择替换设置
在右侧窗格中,修改在修改过的json文件中创建的条目:将前一个设置替换为
C:\\WINDOWS\\Sysnative\\bash.exe
让您的WSL Ubuntu Bash终端适用于开发
当您使用 + 打开终端时,您现在应该有一个bash终端。
这是您第一次运行bash.exe,可能会询问您是否安装Ubuntu。这样做。安装完成后,选择您在WSL Ubuntu中使用的用户名和密码。这些不必与您当前的Windows帐户一致,并且需要注意的是,它们不会根据您的Windows帐户密码的更改而更改。
完成后,你的终端将会有一个bash命令提示符。
请注意,与Windows上的git-bash不同,这是一个单独的环境。虽然它可以用于在自己之外启动 Windows软件,但您需要适当的Ubuntu软件包才能在实际终端中运行它们。
当前,WSL不会加载所有您可能期望或习惯的东西,有些东西可能与您在Windows中加载的软件相冲突,基于默认的配置文件设置。
更新& git
注意:我会将这些文件记录为sudo,仅供单个人使用,但在开始时有一个选项
确保
这是非常可移植的,理想情况下不需要在有或没有WSL的系统或其他操作系统之间进行更改,并且是我推荐的方法。 / p>
截至目前,此方法还会生成另一个 TERMINAL
选项卡实例(从下拉菜单中访问)。您仍然可以设置适当的观察者,但这确实意味着它不再位于 OUTPUT
选项卡中。
旧方法能够调用WSL Ubunutu Bash shell并使其显示在 OUTPUT
中,并且涉及使用-c参数调用bash.exe或使用shell脚本。不幸的是,它不是语义上的,因为我们正在制作 bash
我们的命令,并将它作为参数传递给我们想要运行的参数。这也意味着它不能像其他系统那样快速移植。
您可以使用您之前为终端本身提供VS Code的相同位置, C:\\WINDOWS\\Sysnative\\\ bash.exe
作为命令的值
将 args
数组的第一个元素设置为 -c
,第二个作为您要运行的命令( )。另外,你也可以?
想拥有一个? (这可以让你做一些事情,例如在Ubuntu系统本身使用Linux GUI编辑器来处理文件:不要使用Windows编辑工具编辑它们,请参阅npm部分的注释/注释)
想要构建(请参阅上面有关为WSL正确设置VS代码任务的部分)和? (这显示了如何使用gdb,但 pipeTransport
概念可以与其他调试器一起使用)(称为,但是它之前的一个也提供了一个使用本地回送的方法,这可能证明是有用的)
While other questions deal with how to use things like git-bash, giving the new WSL a spin as the terminal for VS Code is not the same: it gives you access to bash running on an actual Ubuntu Linux subsystem, instead of the git-bash terminal running on the Windows subsystem.
So how do we get it working as the VS Code terminal, and particularly how do we get it working as a functional dev environment terminal?
Unlike git-bash, this is unfortunately not as simple, because the Ubuntu Linux configuration in WSL can provide some gotchas, such as NPM trying (and failing) to run from your Windows Program Files directory due to the interaction between WSL and Windows itself in terms of pathing, and some packages such as Compass failing for what are not necessarily immediately obvious reasons to someone who is not used to developing on Linux. What's a simple way to have a reliable WSL terminal environment for VS Code where most frequently used tools will run when installed via apt-get
or npm
?
This answer seeks to help others avoid spending 1-2 hours troubleshooting and slowly finding disparate solutions for common problems when using WSL for the terminal in VS Code. It does not cover installing specific packages, but rather common ones that may not properly install as dependencies when installing things that do rely on their presence, and on fixing related common settings.
Summary of steps
- WSL installed
- VS Code configured for terminal
- NPM installed & path fix in .profile (may help with other tools)
- build-essential installed (helps with any tools that use make/gcc/etc)
- VS Code Tasks using WSL
- Extras
Getting Started & Requirements
- You must have WSL installed. (Which means you must be running 64 bit Windows 10, with the appropriate updates) Follow the install guide if not already installed. This will require some reboots.
VS Code Terminal Configuration
Either the + keyboard shortcut, or File
→ Preferences
→ Settings
In the top right of the editing window, make sure you are working in the correct context for you: either User Settings or Workspace Settings.
In the settings search bar, type terminal.integrated.shell.windows
(or whatever gets you far enough long)
Find the setting in the actual settings file, use Edit
(mouse over the line, it will be on the left: on a touch screen without a mouse, you should be able to simply tap to the left of the line), and select Replace in Settings
In the right pane, modify the entry created in the modified json file: replace the previous setting with
"C:\\WINDOWS\\Sysnative\\bash.exe"
Making your WSL Ubuntu Bash Terminal functional for dev
When you use + to open the terminal, you should now have a bash terminal.
If this is the first time you have run bash.exe, you may be asked about installing Ubuntu. Do so. Once your installation is complete, choose your username and password to be used in WSL Ubuntu. These do not have to coincide with your current Windows account, and it's important to note that they will not change based on changes to your Windows account's password.
Once you are done, you will have a bash command prompt in your terminal.
Note that unlike git-bash on Windows, this is a separate environment. While it can be used to launch Windows software outside of itself, you will need appropriate Ubuntu packages to run them within the actual terminal.
Currently, WSL does not come loaded with everything you might expect or be used to having, and some things can conflict with software you have loaded in Windows, based on default profile settings.
Updates & git
Note: I'm going to document these as sudo for people who simply need single pieces of this, but one option at the start is to instead sudo su
and simply running the following commands without sudo.
Make sure your Ubuntu packages are up to date:
sudo apt-get -y update
sudo apt-get -y upgrade
sudo apt-get -y dist-upgrade
sudo apt autoremove
Install git:
sudo apt-get install git
Node.js & NPM
If you already have Node or NPM loaded in Windows, running them in Ubuntu can get problematic due to path issues.
First, install node.js with NPM.(alternate: install NVM and use it to install node.js)
After installing, running npm commands will probably fail: for example, npm -v
will probably give you:
: 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")
This is due to a pathing issue with a fairly straightforward solution. Using your favorite CLI editor (such as nano
, vim
, emacs
, cat
and sed
… etc), open your ~/.profile
nano ~/.profile
Note: do NOT attempt to edit Linux files using Windows tools. (Thanks to @david-c-rankin's comment for the official link with the bold red text explaining this) If you don't want to use a CLI editor for this in the terminal, see the bottom of this post for a link on how to get a GUI one running.
Currently, the default bash PATH variable in WSL is
PATH="$HOME/bin:$HOME/.local/bin:$PATH"
Which is injecting the windows path after the first two binary directories. Unfortunately, this doesn't result in /usr/bin being used before the windows installed npm, so add that before the final $PATH:
PATH="$HOME/bin:$HOME/.local/bin:/usr/bin:$PATH"
Save out, and then either reload the terminal or just source the path file
source ~/.profile
Build-essential
If you are using anything which requires compiling or otherwise uses make, it's almost guaranteed that you will need these installed; so if you did not install them while installing node.js, do so. It's much easier to simply use the build-essential package rather than try to install everything separately.
Note that packages such as Compass which rely on Ruby FFI will fail without these. If you are having trouble properly installing and running a tool, making sure you have gcc and make installed can be a good place to start.
sudo apt-get install -y build-essential
Running Tasks using Ubuntu
Note that if you use VS Code's tasks.json to run build tasks, by default it will still run them using the Windows subsystem instead of the Ubuntu one. Sometimes this may be what you want, but if you've just finished installing grunt-cli in Ubuntu and not Windows, it's probably not.
VS Code recently had the 2017 May update to how Tasks work that allows it to set the task runner as the terminal. This is by far the easiest way to migrate tasks over.
Simply set
"runner": "terminal",
in your tasks.json
and you're done (assuming you have all of the appropriate tools you are trying to run now installed in WSL Ubuntu).
This is very portable, ideally requiring no changes between systems which do or do not have WSL, or to other OSes, and is the method I would recommend.
As of the moment, this method spawns another TERMINAL
tab instance (accessed from the drop down). You can still set up appropriate watchers, but it does mean that it's no longer sitting on the OUTPUT
tab.
The old method is capable of invoking the WSL Ubunutu Bash shell and having it show up in OUTPUT
, and involves either calling bash.exe with the -c argument or using a shell script. It unfortunately is not as semantic, since we are making bash
our command and passing it what we want to run as an argument instead. This also means it is not as quickly portable to other systems.
You can use the same location you gave VS Code earlier for the terminal itself, C:\\WINDOWS\\Sysnative\\bash.exe
as the value for command
Set the first element of the args
array as -c
and the second as the command you want to run (credit to the second half of this answer).
Alternatively, you can instead run a shell script as seen here.
Further helpful bits
Want to start VSCode in Windows from the WSL Bash command line?
Want to have a graphical interface for your WSL Ubuntu? (this will allow you to do things like use a Linux GUI editor for files within the Ubuntu system itself: do not edit them using Windows editing tools, see comments/note in section on npm)
Want to build (see the above portion on setting up VS Code Tasks properly for WSL) and debug entirely within WSL Ubuntu? (this shows how to do so using gdb, but the pipeTransport
concept could be used with other debuggers) (credit to this answer, but the one before it also provides a method using local loopback that could prove useful)
这篇关于我如何在Windows上的Ubuntu(WSL)上为我的VS代码终端使用Bash?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!