Modification de fichiers dans un environnement de développement de sous-système Windows pour Linux

23

Le sous-système Windows pour Linux (WSL) fonctionne assez bien pour rendre la plupart des outils Linux en ligne de commande disponibles et travailler sur Windows sans modification. Cependant, cela devient un peu délicat pour le développement, quand on veut

  • Construisez un projet à l'aide d'une chaîne d'outils Linux qui n'a pas d'équivalent Windows bien pris en charge (Ruby, Node, etc.)
  • Modifiez les fichiers à l'aide d'un éditeur d'interface graphique Windows tel que le code Visual Studio.

Le problème est que les applications Windows ne peuvent pas modifier les fichiers à l'intérieur du système de fichiers lxss virtuel . La modification directe de ces fichiers est connue pour provoquer toutes sortes de problèmes.

Par conséquent, il ne semble y avoir que deux choix sous-optimaux en ce qui concerne l'utilisation de WSL pour le développement:

  1. Stockez le projet sous lxss ( /home/foo). La chaîne d'outils normale fonctionne correctement. Cependant, l'édition est limitée aux Vim / Emacs basés sur un terminal ou à tout ce qui peut être exécuté sous un serveur janky X , ce qui est moins fluide que les éditeurs natifs fonctionnant sous Windows.

  2. Stockez le projet sous le système de fichiers Windows ( /mnt/c/Users/foo). Désormais, n'importe quel éditeur Windows peut être utilisé pour le développement. Cependant, la chaîne d'outils basée sur Linux est fragile car elle n'est pas conçue pour être utilisée sur un "lecteur réseau", et peut causer des problèmes avec l' observation des fichiers ou les bases de données .

Existe-t-il un moyen de tirer le meilleur parti des deux mondes ici - c'est-à-dire de pouvoir éditer à l'aide d'une application Windows native, tout en faisant fonctionner la chaîne d'outils Linux comme elle le ferait normalement sur un lecteur local?

Andrew Mao
la source

Réponses:

4

Microsoft a récemment ajouté un support complet pour cela, et il devrait être généralement disponible dans la mise à jour d'avril 2019 (19H1). Une fois qu'il est prêt, un serveur 9P s'exécute en arrière-plan chaque fois qu'une distribution Linux est en cours d'exécution. Le serveur 9P sera capable de gérer les métadonnées du système de fichiers Linux, et Windows pourra le traiter comme un lecteur réseau afin qu'il puisse y accéder en toute sécurité. Vous pouvez en lire plus sur https://blogs.msdn.microsoft.com/commandline/2019/02/15/whats-new-for-wsl-in-windows-10-version-1903/ .

Avec la nouvelle fonctionnalité, vous pourrez accéder en toute sécurité aux fichiers du système de fichiers Windows et Linux à partir de Windows, tant que vous passez par le serveur 9P. Ceci sera géré nativement depuis WSL. Par exemple, à partir de la ligne de commande WSL, vous pourrez taper code /mnt/c/Users/username/src/windows-file.txtpour ouvrir un fichier Windows dans VS Code, ou taper code /home/username/src/linux-file.txtpour ouvrir un fichier Linux dans VS Code.

Si vous ne faites pas partie du programme Windows Insider, vous n'y aurez pas encore accès, vous devrez donc toujours utiliser une méthode plus ancienne, telle que wslpath.

wslpath convertira les chemins de style Windows et Linux afin que vous puissiez facilement ouvrir des fichiers Windows à partir de la ligne de commande WSL. Selon https://github.com/Microsoft/WSL/issues/3146#issuecomment-388118689 , il refusera de convertir les chemins d'accès au système de fichiers Linux (c'est-à-dire% AppData% \ lxss), car sans 9P, il n'est pas sûr de modifier ces fichiers à partir de Windows . Cela signifie que vous ne pouvez pas ouvrir /home/username/src/linux-file.txt, mais vous pouvez utiliser code "$(wslpath -aw /mnt/c/Users/username/src/windows-file.txt)".

Dans le passé, il y avait un certain nombre d'outils tiers pour effectuer la même conversion, mais wslpath le fait nativement - en fait, cela ls -l /bin/wslpathmontre que ce n'est qu'un lien vers / init.

Shane Lawrence
la source
@alex wsltools peut convertir les chemins Linux en leurs équivalents Windows. De cette façon, vous pouvez ouvrir un programme Windows à partir de la ligne de commande Linux et lui dire d'ouvrir un fichier sur le système de fichiers Windows.
Shane Lawrence
Ne pense pas. blogs.msdn.microsoft.com/commandline/2016/11/17/… . Pouvez-vous fournir une référence indiquant qu'il est sûr de le faire?
Alex
@alex merci d'avoir soulevé cette question. C'est un bon point à clarifier. Le lien que vous avez partagé (qui est également dans la question d'OP) vous dit de ne pas ouvrir les fichiers dans le système de fichiers Linux à partir de Windows (c'est-à-dire n'utilisez pas les applications Windows pour changer les choses sous% AppData% \ lxss). Ma réponse et mon commentaire précédent décrivent tous deux comment ouvrir des fichiers Windows dans des programmes Windows à partir de la ligne de commande WSL (par exemple, ouvrez "C: \ Users \ Username \ src \ example.txt" à partir de son chemin WSL "/ mnt / c / Users / Nom d'utilisateur / src / example.txt "). Il y a aussi une nouvelle méthode qui sort. J'ai mis à jour ma réponse pour montrer la distinction et la nouvelle méthode.
Shane Lawrence
Shane, quel est l'intérêt d'utiliser le WSL si vous allez éditer des fichiers Windows avec des binaires Windows? Pourquoi ne pas simplement utiliser des fenêtres?
Alex
Bonne nouvelle: WSL peut désormais éditer des fichiers linux sans problèmes avec Win10 1903: devblogs.microsoft.com/commandline/… "Dans le passé, la création et la modification de fichiers Linux à partir de Windows entraînaient la perte de fichiers ou la corruption de données. fonctionnalité très demandée et attendue depuis longtemps. Nous sommes fiers d'annoncer que vous pouvez désormais accéder facilement à tous les fichiers de vos distributions Linux à partir de Windows. "
KERR
1

Je suis sûr que des gens plus intelligents que moi ont examiné cette question. Mais je vais y répondre. Je crois sincèrement que la réponse est actuellement non. Il y a une meilleure façon de tirer le meilleur parti des deux mondes, autres que ceux que vous avez mentionnés (que je sache).

Je suis sûr que ce n'est la réponse que quiconque veut, mais je pense que c'est la bonne réponse. Je sais que c'est quelque chose que Microsoft essaie de rendre plus fluide, mais il n'est pas encore là.

trueCamelType
la source
Et ce n'est toujours pas le cas.
hugo der hungrige
0

Au premier semestre 2018, Microsoft a publié quelques améliorations de WSL qui résolvent certains de ces problèmes:

Aucun de ceux-ci ne répond entièrement aux problèmes de ma question initiale, mais ils peuvent améliorer la convivialité dans certains cas spécifiques.

Andrew Mao
la source
Merci! Gardez-le à jour. Je serais même d'accord si cela me permettait d'utiliser "en toute sécurité" mon éditeur d'interface graphique préféré pour certains fichiers, je peux vivre sans une intégration correcte des outils de construction (cela pourrait être fait à partir de la console). Même temporairement "rsync-ing" des fichiers vers la copie locale de Windows serait bien tant qu'il est fait de manière transparente. J'approche d'un point ennuyeux là-bas, il est trop difficile d'éditer et de garder une trace de tous les fichiers de la CLI (au moins pour moi), et je veux vraiment juste "faire tout ce qu'il y a sur Windows," envoyer / copier "du code vers WSL , lancez des outils là-bas
Dan M.
0

Si vous souhaitez exécuter des commandes linux et modifier avec les éditeurs Windows. Vous pouvez conserver votre code source (que vous souhaitez modifier et tester), quelque part dans votre système de fichiers (comme c: \ source \) et y accéder dans la console Linux via / mnt / c / source. J'espère que cela t'aides.

Eli
la source
0

Maintenant, Visual Studio Code prend en charge (comme je l'utilise). "Extension WSL" qui vous permet d'effectuer des fichiers / dossiers CRUD (Créer, lire, mettre à jour, supprimer) à partir de l'emplacement Linux. Bien que j'ai toujours du mal à obtenir la même configuration pour atom, qui était mon choix d'éditeur pour le développement d'applications Rails sur la plate-forme Linux.

user132929
la source