web-dev-qa-db-fra.com

Comment utiliser Bash sur Ubuntu sur Windows (WSL) pour mon terminal Code VS?

Tandis que d'autres questions traitent de comment utiliser des choses comme git-bash , donner un nouveau tour à la nouvelle WSL car le terminal pour VS Code n'est pas la même: il vous donne accès à bash s'exécutant sur un Linux Ubuntu réel sous-système, au lieu du terminal git-bash exécuté sur le sous-système Windows.

Alors, comment pouvons-nous le faire fonctionner comme terminal VS Code, et en particulier comment le faire fonctionner comme un terminal d’environnement de développement fonctionnel?

Contrairement à git-bash, ce n’est malheureusement pas aussi simple, car la configuration Linux sous Ubuntu peut fournir quelques pièges, tels que NPM qui tente (et échoue) de s’exécuter à partir de votre répertoire Windows Program Files en raison de l’interaction entre WSL et Windows lui-même. certains paquets tels que Compass échouant pour des raisons qui ne sont pas forcément évidentes pour quelqu'un qui n'est pas habitué à développer sous Linux. Quel est un moyen simple d’avoir un environnement de terminal WSL fiable pour VS Code dans lequel les outils les plus fréquemment utilisés s’exécuteront lorsqu’ils seront installés via apt-get ou npm?

81
taswyn

Cette réponse vise à aider les autres utilisateurs à éviter de passer 1 à 2 heures de dépannage et à trouver lentement des solutions disparates aux problèmes courants lors de l’utilisation de WSL pour le terminal dans VS Code. Elle ne couvre pas l’installation de packages spécifiques, mais plutôt les paquets courants qui peuvent ne pas s’installer correctement en tant que dépendances lors de l’installation de choses qui dépendent de leur présence et de la correction des paramètres communs associés.

Résumé des étapes

  • WSL installé
  • Code VS (ou autre IDE) configuré pour le terminal
  • NPM installé & chemin correctif dans .profile (peut aider avec d'autres outils)
  • build-essential installed (aide avec tous les outils utilisant make/gcc/etc)
  • Tâches de code VS utilisant WSL
  • Suppléments

Mise en route et exigences

  • Vous devez avoir installé WSL . (Ce qui signifie que vous devez exécuter 64 bits Windows 10, avec les mises à jour appropriées) Suivez le guide d'installation s'il n'est pas déjà installé. . Cela nécessitera des redémarrages.

Configuration du terminal de code VS

Soit le CTRL+, raccourci clavier ou FilePreferencesSettings

En haut à droite de la fenêtre d'édition, assurez-vous que vous travaillez dans le contexte qui vous convient: soit Paramètres utilisateur ou Paramètres de l'espace de travail .

enter image description here

Dans la barre de recherche des paramètres, saisissez terminal.integrated.Shell.windows (ou tout ce qui vous mène assez longtemps)

Recherchez le paramètre dans le fichier de paramètres actuel, utilisez Edit (déplacez la souris sur la ligne, ce sera sur la gauche: sur un écran tactile sans souris, vous devriez pouvoir taper simplement à gauche de la ligne) et sélectionner Replace in Settings.

enter image description here

Dans le volet de droite, modifiez l’entrée créée dans le fichier json modifié: remplacez le paramètre précédent par

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

enter image description here

Autres IDE: IntelliJ

Ouvrez Paramètres/Outils/Terminal et définissez le champ "Shell path" sur "C:\Users\USERNAME\AppData\Local\Microsoft\WindowsApps\ubuntu.exe".

Rendre votre terminal WSL Ubuntu Bash fonctionnel pour dev

Quand vous utilisez CTRL+` pour ouvrir le terminal, vous devriez maintenant avoir un terminal bash.

Si c'est la première fois que vous exécutez bash.exe, vous pouvez être invité à installer Ubuntu. Le faire Une fois votre installation terminée, choisissez votre nom d'utilisateur et votre mot de passe à utiliser dans WSL Ubuntu. Celles-ci ne doivent pas nécessairement coïncider avec votre compte Windows actuel et il est important de noter qu'elles ne changeront pas en fonction des modifications apportées au mot de passe de votre compte Windows.

Une fois que vous avez terminé, vous aurez une invite de commande bash dans votre terminal . enter image description here

Notez que contrairement à git-bash sous Windows, il s’agit d’un environnement séparé. Bien qu'il puisse être utilisé pour lancer un logiciel Windows en dehors de lui-même, vous aurez besoin des packages Ubuntu appropriés pour les exécuter dans le terminal réel.

Actuellement, WSL ne contient pas tout ce que vous pouvez espérer ou ce que vous avez l'habitude de faire, et certaines choses peuvent entrer en conflit avec les logiciels que vous avez chargés dans Windows, en fonction des paramètres de profil par défaut.

Mises à jour et git

Remarque: Je vais les documenter sous le nom de Sudo pour les personnes qui en ont simplement besoin, mais une option au début consiste à Sudo su et exécutez simplement les commandes suivantes sans Sudo.

Assurez-vous que vos paquets Ubunt sont à jour:

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

Installez git:

Sudo apt-get install git

Node.js & NPM

Si vous avez déjà Node ou NPM chargé dans Windows, leur exécution dans Ubuntu peut poser problème en raison de problèmes de chemin. Donc, vous devez installer les versions natives Ubuntu et vous assurer qu’elles sont utilisées à la place.

Tout d'abord, installez node.js avec NPM . (alternative: install NVM et utilisez-le pour installer node.js)

Après l'installation, l'exécution des commandes npm échouera probablement: par exemple, npm -v vous donnera probablement:

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

Ceci est dû à un problème de cheminement avec une solution assez simple . En utilisant votre éditeur CLI préféré (tel que nano, vim, emacs, cat et sed… etc.), ouvrez votre ~/.profile

nano ~/.profile

Remarque: n'essayez PAS de modifier des fichiers Linux à l'aide d'outils Windows . (Merci à @ david-c- rankin's comment pour le lien officiel avec le texte en gras rouge expliquant cela) Si vous ne souhaitez pas utiliser un éditeur de ligne de commande pour cela dans le terminal, voir la fin de cet article pour un lien sur la façon d'obtenir une interface graphique fonctionnement.

Actuellement, la variable PATH bash par défaut dans WSL est

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

Ce qui injecte le chemin Windows après les deux premiers répertoires binaires. Malheureusement, cela n'entraîne pas l'utilisation de/usr/bin avant l'installation de npm par Windows, ajoutez-le donc avant le dernier $ PATH:

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

Enregistrez à l'extérieur, puis rechargez le terminal ou sourcez simplement le fichier de chemin

source ~/.profile

Build-essential

Si vous utilisez quelque chose qui nécessite la compilation ou utilise autrement make, il est presque garanti que vous en aurez besoin; donc, si vous ne les avez pas installées lors de l'installation de node.js, faites-le. Il est beaucoup plus facile de simplement utiliser le paquet essentiel de la construction plutôt que d'essayer d'installer tout séparément.

Notez que des paquets tels que Compass, qui reposent sur Ruby FFI, échoueront sans cela. Si vous rencontrez des problèmes pour installer et exécuter correctement un outil, assurez-vous que gcc et que make est installé peut être un bon point de départ.

Sudo apt-get install -y build-essential

Exécuter des tâches avec Ubuntu

Notez que si vous utilisez tasks.json de VS Code pour exécuter des tâches de construction, il les exécutera toujours par défaut en utilisant le sous-système Windows au lieu de celui d'Ubuntu. Parfois c'est peut-être ce que vous voulez, mais si vous venez de terminer l'installation de grunt-cli sous Ubuntu et non Windows, ce n'est probablement pas le cas.

VS Code a récemment eu la mise à jour de mai 2017 sur le fonctionnement des tâches qui lui permet de définir le gestionnaire de tâches comme terminal . C'est de loin le moyen le plus simple de migrer des tâches.

Il suffit de définir

"runner": "terminal",

dans votre tasks.json et vous avez terminé (en supposant que vous disposiez de tous les outils appropriés que vous essayez d'exécuter installés maintenant dans WSL Ubuntu) . enter image description here

Ceci est très portable, ne nécessitant idéalement aucun changement entre les systèmes dotés ou non de WSL, ou d’autres systèmes d’exploitation. C’est la méthode que je recommanderais.

Pour le moment, cette méthode génère une autre instance de l'onglet TERMINAL (accessible à partir du menu déroulant). Vous pouvez toujours configurer des observateurs appropriés, mais cela signifie qu’il ne reste plus sur l’onglet OUTPUT.

L'ancienne méthode est capable d'appeler le shell WSL Ubunutu Bash et de l'afficher dans OUTPUT, et implique d'appeler bash.exe avec l'argument -c ou d'utiliser un script Shell. Malheureusement, ce n’est pas aussi sémantique, puisque nous faisons bash notre commande et lui transmettons ce que nous voulons exécuter comme argument. Cela signifie également qu'il n'est pas aussi rapidement portable sur d'autres systèmes.

Vous pouvez utiliser le même emplacement que vous avez précédemment attribué à VS Code pour le terminal lui-même, C:\\WINDOWS\\Sysnative\\bash.exe, en tant que valeur pour commandenter image description here

Définissez le premier élément du tableau args en tant que -c et le second en tant que commande à exécuter ( à la seconde moitié de cette réponse ).

Alternativement, vous pouvez à la place exécuter un script Shell comme on le voit ici .

Autres éléments utiles

Voulez-vous démarrer VSCode dans Windows à partir de la ligne de commande WSL Bash ?

Voulez-vous avoir un interface graphique pour votre WSL Ubunt ? (Cela vous permettra de faire des choses comme utiliser un éditeur graphique Linux pour les fichiers dans le système Ubuntu lui-même: ne les éditez pas avec les outils d’édition Windows, voir commentaires/remarque dans la section npm)

Voulez-vous construire (voir la partie ci-dessus sur la configuration correcte des tâches de code VS pour WSL) et déboguer entièrement dans WSL Ubunt ? (cela montre comment utiliser gdb, mais le concept pipeTransport pourrait être utilisé avec d'autres débogueurs) (crédit à cette réponse , mais celle qui le précède fournit également une méthode utilisant la boucle locale qui pourrait s'avérer utile )

170
taswyn

si vous souhaitez utiliser zsh, recherchez le chemin de ubuntu1804.exe ou ubuntu1604.exe.

dans mon cas

"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",
3
Hyeon ki Hong

Maintenant, vous pouvez utiliser extension WSL de Microsoft .

2
Almenon