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

87

Alors que d'autres questions portent sur la façon d'utiliser des choses comme git-bash , donner au nouveau WSL un tour en tant que terminal pour VS Code n'est pas la même chose: cela vous donne accès à bash s'exécutant sur un sous-système Linux Ubuntu, au lieu du git- terminal bash s'exécutant sur le sous-système Windows.

Alors, comment le faire fonctionner en tant que terminal VS Code, et en particulier comment le faire fonctionner en tant que terminal d'environnement de développement fonctionnel?

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

Taswyn
la source

Réponses:

184

Cette réponse vise à aider les autres à éviter de passer 1 à 2 heures à dépanner et à trouver lentement des solutions disparates aux problèmes courants lors de l'utilisation de WSL pour le terminal dans VS Code. Il ne couvre pas l'installation de packages spécifiques, mais plutôt ceux courants qui peuvent ne pas s'installer correctement en tant que dépendances lors de l'installation d'éléments 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é et correctif de chemin dans .profile (peut aider avec d'autres outils)
  • build-essential installé (aide avec tous les outils qui utilisent 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 Windows 10 64 bits , avec les mises à jour appropriées) Suivez le guide d'installation s'il n'est pas déjà installé. Cela nécessitera quelques redémarrages.

Configuration du terminal de code VS

Soit le raccourci clavier CTRL+ ,, soit FilePreferencesSettings

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

entrez la description de l'image ici

Dans la barre de recherche des paramètres, tapez terminal.integrated.shell.windows(ou tout ce qui vous amène assez loin)

Trouvez le paramètre dans le fichier de paramètres réel, utilisez Edit(passez la souris sur la ligne, ce sera à gauche: sur un écran tactile sans souris, vous devriez pouvoir simplement taper à gauche de la ligne), et sélectionnezReplace in Settings

entrez la description de l'image ici

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"

entrez la description de l'image ici

Autres IDE: IntelliJ

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

Rendre votre terminal WSL Ubuntu Bash fonctionnel pour les développeurs

Lorsque 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 serez peut-être invité à installer Ubuntu. Faites-le. Une fois votre installation terminée, choisissez votre nom d'utilisateur et votre mot de passe à utiliser dans WSL Ubuntu. Ceux-ci ne doivent pas nécessairement coïncider avec votre compte Windows actuel et il est important de noter qu'ils 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.entrez la description de l'image ici

Notez que contrairement à git-bash sous Windows, il s'agit d'un environnement distinct. 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 n'est pas livré avec tout ce que vous pourriez attendre ou avoir l'habitude d'avoir, 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 & git

Remarque: je vais les documenter comme sudo pour les personnes qui ont simplement besoin de pièces uniques, mais une option au début consiste à sudo suexécuter à la place et simplement les commandes suivantes sans sudo.

Assurez-vous que vos packages Ubuntu 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 et NPM

Si vous avez déjà chargé Node ou NPM dans Windows, les exécuter dans Ubuntu peut devenir problématique en raison de problèmes de chemin. Vous devez donc installer les versions natives d'Ubuntu et vous assurer qu'elles sont utilisées à la place.

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

Après l'installation, l'exécution des commandes npm échouera probablement: par exemple, npm -vvous 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")

Cela est dû à un problème de chemin avec une solution assez simple . En utilisant votre éditeur de CLI favori (comme nano, vim, emacs, catet sed... etc), ouvrez votre~/.profile

nano ~/.profile

Remarque: n'essayez PAS de modifier les fichiers Linux à l'aide des outils Windows . (Merci au commentaire de @ david-c-rankin pour le lien officiel avec le texte rouge en gras expliquant cela) Si vous ne voulez pas utiliser un éditeur CLI pour cela dans le terminal, voir le bas de cet article pour un lien sur comment pour faire fonctionner une interface graphique.

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 Windows npm, alors ajoutez cela avant le $ PATH final:

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

Enregistrez, puis rechargez le terminal ou recherchez simplement le fichier de chemin

source ~/.profile

Construire-essentiel

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

Notez que les packages tels que Compass qui reposent sur Ruby FFI échoueront sans ceux-ci. Si vous rencontrez des difficultés pour installer et exécuter correctement un outil, assurez-vous que gcc et make sont installés peut être un bon point de départ.

sudo apt-get install -y build-essential

Exécuter des tâches à l'aide d'Ubuntu

Notez que si vous utilisez le fichier tasks.json de VS Code pour exécuter des tâches de construction, par défaut, il les exécutera toujours en utilisant le sous-système Windows au lieu de celui d'Ubuntu. Parfois, cela peut être ce que vous voulez, mais si vous venez de terminer l'installation de grunt-cli dans Ubuntu et non dans 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 lanceur de tâches comme terminal . C'est de loin le moyen le plus simple de migrer des tâches.

Réglez simplement

"runner": "terminal",

dans votre tasks.jsonet vous avez terminé (en supposant que vous avez tous les outils appropriés que vous essayez d'exécuter maintenant installés dans WSL Ubuntu).entrez la description de l'image ici

C'est très portable, ne nécessitant idéalement aucun changement entre les systèmes qui ont ou non WSL, ou vers d'autres systèmes d'exploitation, et c'est la méthode que je recommanderais.

À partir du moment, cette méthode génère une autre TERMINALinstance d'onglet (accessible à partir du menu déroulant). Vous pouvez toujours configurer des observateurs appropriés, mais cela signifie qu'il n'est plus assis sur l' OUTPUTonglet.

L'ancienne méthode est capable d'appeler le shell WSL Ubunutu Bash et de le faire apparaître OUTPUT, et implique soit d'appeler bash.exe avec l'argument -c, soit d'utiliser un script shell. Ce n'est malheureusement pas aussi sémantique, puisque nous faisons bashnotre commande et lui passons ce que nous voulons exécuter comme argument à la place. Cela signifie également qu'il n'est pas aussi rapidement portable vers d'autres systèmes.

Vous pouvez utiliser le même emplacement que vous avez indiqué précédemment pour VS Code pour le terminal lui-même, C:\\WINDOWS\\Sysnative\\bash.execomme valeur pourcommandentrez la description de l'image ici

Définissez le premier élément du argstableau comme -cet le second comme la commande que vous souhaitez exécuter ( crédit à la seconde moitié de cette réponse ).

Sinon, vous pouvez à la place exécuter un script shell comme indiqué ici .

Autres bits utiles

Vous voulez démarrer VSCode dans Windows à partir de la ligne de commande WSL Bash ?

Vous voulez avoir une interface graphique pour votre WSL Ubuntu ? (cela vous permettra de faire des choses comme utiliser un éditeur GUI Linux pour les fichiers dans le système Ubuntu lui-même: ne les éditez pas à l'aide des outils d'édition Windows, voir les commentaires / note dans la section sur npm)

Vous voulez 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 Ubuntu ? (cela montre comment le faire en utilisant gdb, mais le pipeTransportconcept pourrait être utilisé avec d'autres débogueurs) (crédit à cette réponse , mais celle qui précède fournit également une méthode utilisant le bouclage local qui pourrait s'avérer utile)

Taswyn
la source
10
Bonne réponse, il est également utile de fournir l'avis Ne modifiez pas les fichiers Linux à l'aide d'applications et d'outils Windows aux nouveaux utilisateurs WSL. Cela peut être une surprise.
David C. Rankin
1
Grande rédaction, merci! Vous ne savez pas si vous avez vu cela, mais vous pouvez également créer une entrée de registre pour empêcher l'injection du PATH Windows dans Bash, ce qui peut être plus facile pour de nombreux utilisateurs de Windows que de modifier manuellement leur fichier .profile.
Tobias J
3
@ChangQian la raison en est que lorsque Windows 64 bits est sorti, ils ont ajouté un redirecteur de système de fichiers pour les programmes 32 bits, car System32 était réservé aux dll / logiciels 64 bits. Cela se traduit par des applications 32 bits qui essaient d'accéder à System32 au lieu d'accéder à SysWOW64 (oui, cela semble à l'envers). Sysnative empêche cela, mais n'apparaît pas dans les logiciels 64 bits * comme Explorer. Vous pouvez voir un exemple de cela en utilisant l'invite de commande 32 bits: C:\Windows\SysWOW64\cmd.exeet en cours d'exécution dir C:\Windows\Sysnative * Cela fonctionne en VSCode 64 bits car il est codé pour le traduire automatiquement
taswyn
2
Lorsque vous configurez votre terminal sur, ubuntu.exevous risquez de vous retrouver dans votre dossier utilisateur au lieu du dossier du projet. C'est pourquoi vous souhaitez configurer votre terminal en C:\\Windows\\System32\\wsl.exefonction de github.com/Microsoft/WSL/issues/2795 Utilisez wslconfig /setdefault Ubuntupour vous assurer que la bonne installation démarre.
Bernhard Döbler
1
Quand j'ai écrit ceci, c'était quand WSL était beaucoup plus verrouillé (avant le choix de distribution / etc). J'ai une machine avec une nouvelle installation de Windows qui a été mise à jour au moins vers l'édition Spring Creator, donc je vais enfin jeter un coup d'œil sous peu aux améliorations qui peuvent être apportées par divers commentaires et essayer de répondre à votre question, @Narnia.
taswyn
4

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",
Hyeon ki Hong
la source
A bien fonctionné sur la version 1.32 du code Visual Studio et WSL avec ubuntu. Merci!
Salvador P.