Wie verwende ich Bash unter Ubuntu unter Windows (WSL) für mein VS Code-Terminal?

86

Während sich andere Fragen mit der Verwendung von Dingen wie git-bash befassen, ist es nicht dasselbe, der neuen WSL als Terminal für VS-Code einen Spin zu geben: Sie erhalten Zugriff auf bash, das auf einem tatsächlichen Ubuntu Linux-Subsystem ausgeführt wird, anstatt auf git- Bash-Terminal, das auf dem Windows-Subsystem ausgeführt wird.

Wie bringen wir es als VS-Code-Terminal zum Laufen, und insbesondere, wie bringen wir es als funktionales Entwicklungsumgebungsterminal zum Laufen?

Im Gegensatz zu git-bash ist dies leider nicht so einfach, da die Ubuntu Linux-Konfiguration in WSL einige Fallstricke bereitstellen kann, z. B. NPM, das aufgrund der Interaktion zwischen WSL und Windows selbst versucht (und fehlschlägt), aus Ihrem Windows-Programmdateiverzeichnis ausgeführt zu werden Pfadbedingungen und einige Pakete wie Compass, die aus nicht unbedingt sofort offensichtlichen Gründen für jemanden fehlschlagen, der nicht an die Entwicklung unter Linux gewöhnt ist. Was ist eine einfache Möglichkeit, eine zuverlässige WSL-Terminalumgebung für VS Code zu haben, in der die am häufigsten verwendeten Tools ausgeführt werden, wenn sie über apt-getoder installiert werden npm?

Taswyn
quelle

Antworten:

181

Diese Antwort soll anderen helfen, 1-2 Stunden bei der Fehlerbehebung zu vermeiden und langsam unterschiedliche Lösungen für häufig auftretende Probleme zu finden, wenn WSL für das Terminal in VS Code verwendet wird. Es wird nicht die Installation bestimmter Pakete behandelt, sondern häufig verwendete Pakete, die möglicherweise nicht ordnungsgemäß als Abhängigkeiten installiert werden, wenn Dinge installiert werden, die auf deren Vorhandensein und dem Beheben verwandter allgemeiner Einstellungen beruhen.

Zusammenfassung der Schritte

  • WSL installiert
  • VS-Code (oder eine andere IDE), die für das Terminal konfiguriert ist
  • NPM installiert und Pfadkorrektur in .profile (kann bei anderen Tools hilfreich sein)
  • Build-Essential installiert (hilft bei allen Tools, die make / gcc / etc verwenden)
  • VS-Code-Aufgaben mit WSL
  • Extras

Erste Schritte und Anforderungen

  • Sie müssen WSL installiert haben . (Dies bedeutet, dass Sie 64-Bit- Windows 10 mit den entsprechenden Updates ausführen müssen.) Befolgen Sie die Installationsanleitung, falls diese noch nicht installiert ist. Dies erfordert einige Neustarts.

VS Code Terminal Konfiguration

Entweder die Tastenkombination CTRL+ ,oder FilePreferencesSettings

Stellen Sie oben rechts im Bearbeitungsfenster sicher, dass Sie im richtigen Kontext für Sie arbeiten: entweder Benutzereinstellungen oder Arbeitsbereichseinstellungen .

Geben Sie hier die Bildbeschreibung ein

terminal.integrated.shell.windowsGeben Sie in die Suchleiste für Einstellungen ein (oder was auch immer Sie weit genug lang macht)

Suchen Sie die Einstellung in der eigentlichen Einstellungsdatei, verwenden Sie Edit(Maus über die Linie, sie befindet sich links: Auf einem Touchscreen ohne Maus sollten Sie einfach links neben der Linie tippen können) und wählenReplace in Settings

Geben Sie hier die Bildbeschreibung ein

Ändern Sie im rechten Bereich den Eintrag, der in der geänderten JSON-Datei erstellt wurde: Ersetzen Sie die vorherige Einstellung durch

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

Geben Sie hier die Bildbeschreibung ein

Andere IDEs: IntelliJ

Öffnen Sie Einstellungen / Extras / Terminal und setzen Sie das Feld "Shell-Pfad" auf "C:\Users\USERNAME\AppData\Local\Microsoft\WindowsApps\ubuntu.exe"

Machen Sie Ihr WSL Ubuntu Bash Terminal für Entwickler funktionsfähig

Wenn Sie das Terminal mit CTRL+ `öffnen, sollten Sie jetzt ein Bash-Terminal haben.

Wenn Sie bash.exe zum ersten Mal ausführen, werden Sie möglicherweise nach der Installation von Ubuntu gefragt. Tun Sie dies. Wählen Sie nach Abschluss Ihrer Installation Ihren Benutzernamen und Ihr Kennwort für WSL Ubuntu. Diese müssen nicht mit Ihrem aktuellen Windows-Konto übereinstimmen, und es ist wichtig zu beachten, dass sie sich nicht aufgrund von Änderungen am Kennwort Ihres Windows-Kontos ändern.

Sobald Sie fertig sind, wird in Ihrem Terminal eine Bash-Eingabeaufforderung angezeigt.Geben Sie hier die Bildbeschreibung ein

Beachten Sie, dass dies im Gegensatz zu git-bash unter Windows eine separate Umgebung ist. Während es verwendet werden kann, um Windows-Software außerhalb von sich selbst zu starten , benötigen Sie entsprechende Ubuntu-Pakete, um sie im eigentlichen Terminal auszuführen.

Derzeit wird die WSL nicht mit allem geladen, was Sie erwarten oder gewohnt sind, und einige Dinge können aufgrund der Standardprofileinstellungen zu Konflikten mit der in Windows geladenen Software führen.

Updates & Git

Hinweis: Ich werde diese als sudo für Leute dokumentieren, die nur einzelne Teile davon benötigen, aber eine Option am Anfang besteht darin, stattdessen sudo sueinfach die folgenden Befehle ohne sudo auszuführen.

Stellen Sie sicher, dass Ihre Ubuntu-Pakete auf dem neuesten Stand sind:

sudo apt-get -y update
sudo apt-get -y upgrade
sudo apt-get -y dist-upgrade
sudo apt autoremove

Git installieren:

sudo apt-get install git

Node.js & NPM

Wenn Sie Node oder NPM bereits in Windows geladen haben, kann die Ausführung in Ubuntu aufgrund von Pfadproblemen problematisch werden. Sie müssen also die nativen Ubuntu-Versionen installieren und sicherstellen, dass sie stattdessen verwendet werden.

Zuerst installieren node.js mit NPM . (Alternativ: Installieren Sie NVM und verwenden Sie es, um node.js zu installieren.)

Nach der Installation schlägt das Ausführen von npm-Befehlen wahrscheinlich fehl. Beispielsweise erhalten npm -vSie wahrscheinlich Folgendes:

: 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")

Dies ist auf ein Pfadproblem mit einer ziemlich einfachen Lösung zurückzuführen . Mit Ihrem Lieblings - CLI - Editor (wie nano, vim, emacs, catund sed... etc), öffnen Sie Ihre~/.profile

nano ~/.profile

Hinweis: Versuchen Sie NICHT, Linux-Dateien mit Windows-Tools zu bearbeiten . (Dank des Kommentars von @ david-c-rankin für den offiziellen Link mit dem fett gedruckten roten Text, der dies erklärt.) Wenn Sie dafür keinen CLI-Editor im Terminal verwenden möchten, finden Sie unten in diesem Beitrag einen Link dazu um eine GUI zum Laufen zu bringen.

Derzeit ist die Standard-Bash-PATH-Variable in WSL

PATH="$HOME/bin:$HOME/.local/bin:$PATH"

Womit der Windows-Pfad nach den ersten beiden Binärverzeichnissen eingefügt wird. Leider führt dies nicht dazu, dass / usr / bin verwendet wird, bevor Windows npm installiert wird. Fügen Sie dies also vor dem endgültigen $ PATH hinzu:

PATH="$HOME/bin:$HOME/.local/bin:/usr/bin:$PATH"

Speichern Sie das Terminal und laden Sie es entweder neu oder geben Sie die Pfaddatei als Quelle ein

source ~/.profile

Build-essentiell

Wenn Sie etwas verwenden, das kompiliert oder anderweitig verwendet werden muss, ist fast garantiert, dass Sie diese installieren müssen. Wenn Sie sie während der Installation von node.js nicht installiert haben, tun Sie dies. Es ist viel einfacher, das Build-Essential-Paket zu verwenden, als zu versuchen, alles separat zu installieren.

Beachten Sie, dass Pakete wie Compass, die auf Ruby FFI basieren, ohne diese fehlschlagen. Wenn Sie Probleme haben, ein Tool ordnungsgemäß zu installieren und auszuführen, kann es ein guter Anfang sein, sicherzustellen, dass Sie gcc und make installiert haben.

sudo apt-get install -y build-essential

Ausführen von Aufgaben mit Ubuntu

Beachten Sie, dass wenn Sie die Tasks.json von VS Code zum Ausführen von Build-Tasks verwenden, diese standardmäßig weiterhin mit dem Windows-Subsystem anstelle des Ubuntu-Subsystems ausgeführt werden. Manchmal ist dies vielleicht das, was Sie wollen, aber wenn Sie gerade die Installation von grunt-cli in Ubuntu und nicht in Windows abgeschlossen haben, ist dies wahrscheinlich nicht der Fall.

VS Code hatte kürzlich das Mai-Update 2017 für die Funktionsweise von Aufgaben, mit dem der Task-Runner als Terminal festgelegt werden kann . Dies ist bei weitem der einfachste Weg, um Aufgaben zu migrieren.

Einfach einstellen

"runner": "terminal",

in Ihrem tasks.jsonund Sie sind fertig (vorausgesetzt, Sie haben alle geeigneten Tools, die Sie ausführen möchten, jetzt in WSL Ubuntu installiert).Geben Sie hier die Bildbeschreibung ein

Dies ist sehr portabel und erfordert idealerweise keine Änderungen zwischen Systemen mit oder ohne WSL oder anderen Betriebssystemen. Dies ist die Methode, die ich empfehlen würde.

Ab sofort erzeugt diese Methode eine weitere TERMINALRegisterkarteninstanz (Zugriff über die Dropdown-Liste). Sie können weiterhin geeignete Beobachter einrichten, dies bedeutet jedoch, dass diese nicht mehr auf der OUTPUTRegisterkarte sitzen .

Die alte Methode ist in der Lage, die WSL Ubunutu Bash-Shell aufzurufen und OUTPUTin anzuzeigen, und umfasst entweder den Aufruf von bash.exe mit dem Argument -c oder die Verwendung eines Shell-Skripts. Es ist leider nicht so semantisch, da wir bashunseren Befehl geben und ihn übergeben, was wir stattdessen als Argument ausführen möchten. Dies bedeutet auch, dass es nicht so schnell auf andere Systeme portierbar ist.

Sie können denselben Speicherort, den Sie zuvor für das Terminal angegeben haben, C:\\WINDOWS\\Sysnative\\bash.exeals Wert für verwendencommandGeben Sie hier die Bildbeschreibung ein

Legen Sie das erste Element des argsArrays als -cund das zweite als den Befehl fest, den Sie ausführen möchten ( Gutschrift für die zweite Hälfte dieser Antwort ).

Alternativ können Sie stattdessen ein Shell-Skript ausführen, wie hier gezeigt .

Weitere hilfreiche Dinge

Möchten Sie VSCode in Windows von der WSL Bash Kommandozeile starten ?

Möchten Sie eine grafische Oberfläche für Ihre WSL Ubuntu haben ? (Auf diese Weise können Sie beispielsweise einen Linux-GUI-Editor für Dateien im Ubuntu-System selbst verwenden: Bearbeiten Sie sie nicht mit Windows-Bearbeitungstools, siehe Kommentare / Hinweise im Abschnitt zu npm.)

Möchten Sie (siehe den obigen Abschnitt zum ordnungsgemäßen Einrichten von VS-Code-Aufgaben für WSL) erstellen und vollständig in WSL Ubuntu debuggen ? (Dies zeigt, wie dies mit gdb gemacht wird, aber das pipeTransportKonzept könnte mit anderen Debuggern verwendet werden.) ( Diese Antwort wird gutgeschrieben, aber die vorhergehende bietet auch eine Methode mit lokalem Loopback, die sich als nützlich erweisen könnte.)

Taswyn
quelle
10
Gute Antwort, es ist auch nützlich, den Hinweis zu geben. Ändern Sie Linux-Dateien nicht mit Windows-Apps und -Tools an neue WSL-Benutzer. Dies kann eine ziemliche Überraschung sein.
David C. Rankin
1
Tolles Schreiben, danke! Sie sind sich nicht sicher, ob Sie dies gesehen haben, aber Sie können auch einen Registrierungseintrag vornehmen , um zu verhindern, dass der Windows-Pfad in Bash eingefügt wird. Dies ist für viele Windows-Benutzer möglicherweise einfacher als die manuelle Bearbeitung .profile.
Tobias J
3
@ChangQian Der Grund dafür ist, dass bei der Veröffentlichung von 64-Bit-Fenstern ein Dateisystem-Redirector für 32-Bit-Programme hinzugefügt wurde, da System32 für 64-Bit-DLLs / -Software reserviert war. Dies führt zu 32-Bit-Apps, die versuchen, auf System32 zuzugreifen, anstatt auf SysWOW64 zuzugreifen (ja, es scheint rückwärts zu sein). Sysnative erzwingt dies nicht, wird jedoch in 64-Bit-Software * wie Explorer nicht angezeigt. Sie können ein Beispiel dafür an der 32-Bit-Eingabeaufforderung sehen: C:\Windows\SysWOW64\cmd.exeund dir C:\Windows\Sysnative ausführen * Dies funktioniert in 64-Bit-VSCode, da es so codiert ist, dass es automatisch übersetzt wird
Taswyn,
2
Wenn Sie Ihr Terminal auf einstellen, ubuntu.exelanden Sie möglicherweise in Ihrem Benutzerordner anstelle des Projektordners. Aus diesem Grund möchten Sie Ihr Terminal C:\\Windows\\System32\\wsl.exegemäß github.com/Microsoft/WSL/issues/2795 einstellen. Verwenden Sie diese Optionwslconfig /setdefault Ubuntu , um sicherzustellen, dass die richtige Installation beginnt.
Bernhard Döbler
1
Als ich das schrieb, war es, als die WSL viel mehr gesperrt war (vor der Auswahl der Distribution / etc). Ich habe eine Maschine mit einer Neuinstallation von Windows, die mindestens auf die Spring Creator-Edition aktualisiert wurde. Daher werde ich in Kürze einen Blick darauf werfen, welche Verbesserungen anhand verschiedener Kommentare vorgenommen werden können, und versuchen, Ihre Frage @Narnia zu beantworten.
Taswyn
4

Wenn Sie zsh verwenden möchten, suchen Sie den Pfad von ubuntu1804.exe oder ubuntu1604.exe.

in meinem Fall

"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",
Hyeon ki Hong
quelle
Funktionierte gut mit der Version 1.32 von Visual Studio Code und WSL mit Ubuntu. Vielen Dank!
Salvador P.