Wie verwende ich Bash unter Ubuntu unter Windows (WSL) für mein VS Code-Terminal?
Lesezeit: 10 Minuten
taswyn
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 eine Drehung 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 also dazu, als VS Code-Terminal zu funktionieren, und insbesondere, wie wir es als funktionales Terminal für die Entwicklungsumgebung zum Laufen bringen?
Im Gegensatz zu git-bash ist dies leider nicht so einfach, da die Ubuntu-Linux-Konfiguration in WSL einige Fallstricke bieten kann, z Pfade, und einige Pakete wie Compass scheitern aus Gründen, die für jemanden, der nicht an die Entwicklung unter Linux gewöhnt ist, nicht unbedingt sofort offensichtlich sind. 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 installiert werden apt-get oder npm?
taswyn
Diese Antwort soll anderen helfen, 1-2 Stunden mit der Fehlerbehebung zu verbringen und langsam unterschiedliche Lösungen für häufige Probleme zu finden, wenn WSL für das Terminal in VS Code verwendet wird. Es behandelt nicht die Installation bestimmter Pakete, sondern eher allgemeine Pakete, die möglicherweise nicht ordnungsgemäß als Abhängigkeiten installiert werden, wenn Dinge installiert werden, die auf ihr Vorhandensein angewiesen sind, und das Korrigieren verwandter allgemeiner Einstellungen.
Zusammenfassung der Schritte
WSL installiert
VS Code (oder andere IDE) für Terminal konfiguriert
NPM installiert & Pfad fix in .profile (kann bei anderen Tools helfen)
build-essential installiert (hilft bei allen Tools, die make/gcc/etc verwenden)
VS Code-Aufgaben mit WSL
Extras
Erste Schritte & Anforderungen
Du musst WSL installiert haben. (Das heißt, Sie müssen laufen 64-Bit Windows 10 mit den entsprechenden Updates) Befolgen Sie die Installationsanleitung falls noch nicht installiert. Dies erfordert einige Neustarts.
Stellen Sie oben rechts im Bearbeitungsfenster sicher, dass Sie im richtigen Kontext für Sie arbeiten: entweder Benutzereinstellungen oder Arbeitsbereichseinstellungen.
Geben Sie in der Suchleiste der Einstellungen Folgendes ein terminal.integrated.shell.windows (oder was auch immer dich weit genug bringt)
Suchen Sie die Einstellung in der aktuellen Einstellungsdatei, verwenden Sie Edit (Fahren Sie mit der Maus über die Zeile, sie befindet sich links: Auf einem Touchscreen ohne Maus sollten Sie einfach links neben die Zeile tippen können) und auswählen Replace in Settings
Ändern Sie im rechten Bereich den in der geänderten JSON-Datei erstellten Eintrag: Ersetzen Sie die vorherige Einstellung durch
"C:\\WINDOWS\\Sysnative\\bash.exe"
Andere IDEs: IntelliJ
Öffnen Sie Einstellungen/Tools/Terminal und stellen Sie das Feld „Shell-Pfad“ auf ein "C:\Users\USERNAME\AppData\Local\Microsoft\WindowsApps\ubuntu.exe"
Machen Sie Ihr WSL Ubuntu Bash Terminal für Entwickler funktionsfähig
Wenn Sie verwenden STRG+` Um das Terminal zu ö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 der Installation Ihren Benutzernamen und Ihr Kennwort für die Verwendung in WSL Ubuntu aus. 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, haben Sie eine Bash-Eingabeaufforderung in Ihrem Terminal.
Beachten Sie, dass dies im Gegensatz zu git-bash unter Windows eine separate Umgebung ist. Während es verwendet werden kann starten Windows-Software außerhalb von sich selbst benötigen Sie entsprechende Ubuntu-Pakete, um sie im eigentlichen Terminal auszuführen.
Derzeit ist WSL nicht mit allem geladen, was Sie erwarten oder gewohnt sind, und einige Dinge können basierend auf Standardprofileinstellungen mit Software in Konflikt geraten, die Sie in Windows geladen haben.
Updates & Git
Notiz: Ich werde diese als sudo für Leute dokumentieren, die einfach einzelne Teile davon benötigen, aber eine Option am Anfang ist stattdessen sudo su und einfach die folgenden Befehle ohne sudo ausführen.
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.
Notiz: Versuchen Sie NICHT, Linux-Dateien mit Windows-Tools zu bearbeiten. (Dank an den Kommentar von @david-c-rankin für den offiziellen Link mit dem fettgedruckten roten Text, der dies erklärt.) Wenn Sie dafür im Terminal keinen CLI-Editor verwenden möchten, finden Sie am Ende dieses Beitrags einen Link dazu, wie um eine GUI zum Laufen zu bringen.
Derzeit ist die Standard-Bash-PATH-Variable in WSL
PATH="$HOME/bin:$HOME/.local/bin:$PATH"
Was den Windows-Pfad nach den ersten beiden Binärverzeichnissen einfügt. Leider führt dies nicht dazu, dass /usr/bin verwendet wird, bevor Windows npm installiert hat, also fügen Sie das vor dem letzten $PATH hinzu:
PATH="$HOME/bin:$HOME/.local/bin:/usr/bin:$PATH"
Speichern Sie aus und laden Sie dann entweder das Terminal neu oder beziehen Sie einfach die Pfaddatei
source ~/.profile
Build-wesentlich
Wenn Sie irgendetwas verwenden, das kompiliert werden muss oder sonst make verwendet, ist es fast garantiert, dass Sie diese installiert haben müssen; Wenn Sie sie also nicht während der Installation von node.js installiert haben, tun Sie dies. Es ist viel einfacher, einfach zu verwenden das Build-Essential-Paket anstatt zu versuchen, alles separat zu installieren.
Beachten Sie, dass Pakete wie Compass, die auf Ruby FFI angewiesen sind, ohne diese fehlschlagen. Wenn Sie Probleme haben, ein Tool richtig zu installieren und auszuführen, kann es ein guter Anfang sein, sicherzustellen, dass gcc und make installiert sind.
sudo apt-get install -y build-essential
Ausführen von Aufgaben mit Ubuntu
Beachten Sie, dass, wenn Sie die Datei „tasks.json“ von VS Code zum Ausführen von Build-Aufgaben verwenden, diese standardmäßig immer noch mit dem Windows-Subsystem anstelle von Ubuntu ausgeführt werden. Manchmal Das ist vielleicht das, was Sie wollen, aber wenn Sie gerade grunt-cli in Ubuntu und nicht in Windows installiert haben, ist es wahrscheinlich nicht so.
VS Code hatte kürzlich das Mai-Update 2017 zur Funktionsweise von Tasks, das dies ermöglicht Legen Sie den Task-Runner als Terminal fest. Dies ist bei weitem der einfachste Weg, Aufgaben zu migrieren.
Einfach einstellen
"runner": "terminal",
in deiner tasks.json und Sie sind fertig (vorausgesetzt, Sie haben alle geeigneten Tools, die Sie ausführen möchten, jetzt in WSL Ubuntu installiert).
Das ist sehr portabel, erfordert im Idealfall keine Änderungen zwischen Systemen mit oder ohne WSL oder zu anderen Betriebssystemen und ist die Methode, die ich empfehlen würde.
Im Moment bringt diese Methode eine andere hervor TERMINAL Tab-Instanz (Zugriff über das Dropdown-Menü). Sie können immer noch entsprechende Wächter einrichten, aber es bedeutet, dass es nicht mehr auf dem sitzt OUTPUT Tab.
Die alte Methode kann die WSL-Ubunutu-Bash-Shell aufrufen und darin anzeigen OUTPUT, und umfasst entweder den Aufruf von bash.exe mit dem Argument -c oder die Verwendung eines Shell-Skripts. Es ist leider nicht so semantisch, wie wir es machen bash unseren Befehl und übergeben ihm stattdessen das, was wir als Argument ausführen möchten. Dies bedeutet auch, dass es nicht so schnell auf andere Systeme portierbar ist.
Sie können den gleichen Ort verwenden, den Sie VS Code zuvor für das Terminal selbst gegeben haben. C:\\WINDOWS\\Sysnative\\bash.exe als Wert für command
Legen Sie das erste Element von fest args Array als -c und die zweite als den Befehl, den Sie ausführen möchten (Dank an die zweite Hälfte dieser Antwort).
Alternativ können Sie stattdessen ein Shell-Skript ausführen, wie hier gezeigt.
Weitere hilfreiche Bits
Möchten Sie VSCode in Windows über die WSL Bash-Befehlszeile starten?
Möchten Sie eine grafische Oberfläche für Ihr WSL Ubuntu haben? (Dadurch können Sie beispielsweise einen Linux-GUI-Editor für Dateien verwenden innerhalb das Ubuntu-System selbst: Bearbeiten Sie sie nicht mit Windows-Bearbeitungstools, siehe Kommentare/Hinweis im Abschnitt zu npm)
Erstellen möchten (siehe den obigen Abschnitt zum ordnungsgemäßen Einrichten von VS Code-Aufgaben für WSL) und Debuggen Sie vollständig in WSL Ubuntu? (dies zeigt, wie man das mit gdb macht, aber die pipeTransport Konzept könnte mit anderen Debuggern verwendet werden) (Dank an diese Antwort, aber die davor bietet auch eine Methode mit lokalem Loopback, die sich als nützlich erweisen könnte)
Super Aufschrieb, danke! Ich bin mir nicht sicher, ob Sie das gesehen haben, aber es gibt auch eine Registrierungseintrag, den Sie vornehmen können um zu verhindern, dass der Windows PATH in Bash eingefügt wird, was für viele Windows-Benutzer möglicherweise einfacher ist, als ihre manuell zu bearbeiten .profile.
– Tobias J
25. September 2017 um 18:28 Uhr
@ChangQian Der Grund dafür ist, dass bei der Veröffentlichung von 64-Bit-Windows 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 verhindert, dass dies geschieht, wird aber in 64-Bit-Software* wie Explorer nicht angezeigt. Sie können ein Beispiel dafür mit der 32-Bit-Eingabeaufforderung sehen: C:\Windows\SysWOW64\cmd.exe und läuft dir C:\Windows\Sysnative *Dies funktioniert in 64-Bit-VSCode, da es so codiert ist, dass es automatisch übersetzt wird
– Taswyn
20. Oktober 2017 um 21:46 Uhr
Wenn Sie Ihr Terminal auf ubuntu.exe Möglicherweise landen Sie in Ihrem Benutzerordner anstelle des Projektordners. Deshalb möchten Sie Ihr Terminal auf einstellen C:\\Windows\\System32\\wsl.exe entsprechend github.com/Microsoft/WSL/issues/2795 Verwenden wslconfig /setdefault Ubuntu um sicherzustellen, dass die richtige Installation beginnt.
– Bernhard Döbler
9. Juli 2018 um 16:31 Uhr
Als ich dies schrieb, war die WSL viel stärker gesperrt (vor der Distributionsauswahl/usw.). Ich habe eine Maschine mit einer Neuinstallation von Windows, die mindestens auf die Edition von Spring Creator aktualisiert wurde, also werde ich in Kürze einen genauen Blick darauf werfen, welche Verbesserungen anhand verschiedener Kommentare vorgenommen werden können, und versuchen, Ihre Frage zu beantworten, @Narnia.
– Taswyn
14. November 2018 um 4:01 Uhr
Wenn Sie zsh verwenden möchten, finden Sie den Pfad von ubuntu1804.exe oder ubuntu1604.exe.
Die akzeptierte Antwort ist jetzt in den neueren Versionen von VSCode veraltet. Der richtige Weg, dies jetzt zu tun, besteht darin, die zu konfigurieren terminal.integrated.profiles.windows Einstellung.
Dies sollte mit JSON-Objekten von Terminalprofilen konfiguriert werden. Um beispielsweise WSL zu konfigurieren, würden Sie die folgende Einstellung verwenden: