web-dev-qa-db-fra.com

Modification de fichiers dans un environnement de développement Windows Subsystem for Linux

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

  • Construire un projet en utilisant 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 graphique basé sur Windows , tel que du code Visual Studio.

Le problème est que les applications Windows ne peuvent pas modifier les fichiers du système de fichiers virtuel lxss . La modification directe de ces fichiers est connue pour causer 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 à Vim/Emacs basé 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 sous Windows.

  2. Stockez le projet sous le système de fichiers Windows (/mnt/c/Users/foo). Désormais, tout éditeur basé sur 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 entraîner des problèmes de visionnage du fichier ou bases de données .

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

21
Andrew Mao

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 prêt, un serveur 9P fonctionnera en arrière-plan chaque fois qu'une distribution Linux sera exécutée. Le serveur 9P sera en mesure de gérer les métadonnées du système de fichiers Linux et Windows pourra le traiter comme un lecteur réseau afin de pouvoir y accéder en toute sécurité. Vous pouvez en savoir plus à ce sujet à l'adresse https://blogs.msdn.Microsoft.com/commandline/2019/02/15/whats-new-for-wsl-in-windows-10-version. -1903/ .

Avec cette nouvelle fonctionnalité, vous pourrez accéder en toute sécurité aux fichiers de système de fichiers Windows et Linux à partir de Windows, à condition de passer par le serveur 9P. Cela sera géré de manière native à partir de WSL. Par exemple, à partir de la ligne de commande WSL, vous pourrez taper code /mnt/c/Users/username/src/windows-file.txt pour ouvrir un fichier Windows dans VS Code ou taper code /home/username/src/linux-file.txt pour 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 utiliser une méthode plus ancienne, telle que wslpath.

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

Auparavant, il existait un certain nombre d'outils tiers permettant d'effectuer la même conversion, mais wslpath le fait en mode natif - en fait, ls -l /bin/wslpath indique qu'il ne s'agit que d'un lien vers/init.

3
Shane Lawrence

Je suis sûr que des gens plus intelligents que moi ont examiné cette question. Mais je vais y répondre. Je crois honnêtement que la réponse est actuellement non. Il existe un meilleur moyen d’obtenir le meilleur des deux mondes, autres que ceux que vous avez mentionnés (à ma connaissance).

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

1
trueCamelType

Si vous voulez exécuter des commandes linux et éditer 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.

0
Eli

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

Aucune de ces solutions ne résout complètement les problèmes de ma question initiale, mais elles pourraient améliorer la convivialité dans certains cas spécifiques.

0
Andrew Mao