Edición de archivos en un entorno de desarrollo de Windows Subsystem for Linux

23

Windows Subsystem for Linux (WSL) funciona bastante bien para hacer que la mayoría de las herramientas Linux de línea de comandos estén disponibles y funcionen en Windows sin modificaciones. Sin embargo, se vuelve un poco complicado para el desarrollo, cuando uno quiere

  • Cree un proyecto utilizando una cadena de herramientas de Linux que no tenga un equivalente de Windows bien compatible (Ruby, Node, etc.)
  • Edite archivos con un editor de GUI basado en Windows , como el código de Visual Studio.

El problema es que las aplicaciones de Windows no pueden modificar archivos dentro del sistema de archivos virtual lxss . Se sabe que la modificación directa de estos archivos causa todo tipo de problemas.

Por lo tanto, parece que solo hay dos opciones subóptimas cuando se trata de usar WSL para el desarrollo:

  1. Almacene el proyecto en lxss ( /home/foo). La cadena de herramientas normal funciona correctamente. Sin embargo, la edición se limita a Vim / Emacs basado en terminal o lo que se pueda ejecutar en un servidor X de Janky , que es menos fluido que los editores nativos que se ejecutan en Windows.

  2. Almacene el proyecto en el sistema de archivos de Windows ( /mnt/c/Users/foo). Ahora cualquier editor basado en Windows puede usarse para el desarrollo. Sin embargo, la cadena de herramientas basada en Linux es frágil ya que no está diseñada para usarse en una "unidad de red" y puede causar problemas con la observación de archivos o las bases de datos .

¿Hay alguna forma de obtener lo mejor de ambos mundos aquí, es decir, poder editar usando una aplicación nativa de Windows, pero aún así tener la cadena de herramientas de Linux funcionando como lo haría normalmente en un disco local?

Andrew Mao
fuente

Respuestas:

4

Microsoft ha agregado recientemente soporte integral para esto, y debería estar disponible en general en la actualización de abril de 2019 (19H1). Una vez que esté listo, un servidor 9P se ejecutará en segundo plano siempre que se ejecute una distribución de Linux. El servidor 9P podrá manejar metadatos del sistema de archivos de Linux, y Windows podrá tratarlo como una unidad de red para que pueda acceder a él de manera segura. Puede leer sobre esto en https://blogs.msdn.microsoft.com/commandline/2019/02/15/whats-new-for-wsl-in-windows-10-version-1903/ .

Con la nueva función, podrá acceder de forma segura a los archivos del sistema de archivos de Windows y Linux desde Windows, siempre que pase por el servidor 9P. Esto se manejará de forma nativa desde WSL. Por ejemplo, desde la línea de comandos de WSL podrá escribir code /mnt/c/Users/username/src/windows-file.txtpara abrir un archivo de Windows en VS Code, o escribir code /home/username/src/linux-file.txtpara abrir un archivo de Linux en VS Code.

Si no forma parte del Programa Windows Insider, aún no tendrá acceso a este, por lo que deberá seguir utilizando un método anterior, como wslpath.

wslpath convertirá entre rutas de estilo Windows y Linux para que pueda abrir fácilmente archivos de Windows desde la línea de comandos WSL. Según https://github.com/Microsoft/WSL/issues/3146#issuecomment-388118689 , se negará a convertir las rutas del sistema de archivos de Linux (es decir,% AppData% \ lxss), porque sin 9P no es seguro modificar estos archivos desde Windows . Esto significa que no puede abrir /home/username/src/linux-file.txt, pero puede usar code "$(wslpath -aw /mnt/c/Users/username/src/windows-file.txt)".

En el pasado, había una serie de herramientas de terceros para realizar la misma conversión, pero wslpath lo hace de forma nativa; de hecho, ls -l /bin/wslpathmuestra que es solo un enlace a / init.

Shane Lawrence
fuente
@alex wsltools puede convertir las rutas de Linux a sus equivalentes de Windows. De esta manera, puede abrir un programa de Windows desde la línea de comandos de Linux y decirle que abra un archivo en el sistema de archivos de Windows.
Shane Lawrence
No lo creo blogs.msdn.microsoft.com/commandline/2016/11/17/… . ¿Puede proporcionar alguna referencia de que es seguro hacerlo?
Alex
@alex gracias por mencionar esto. Este es un buen punto para aclarar. El enlace que compartió (que también está en la pregunta de OP) le dice que no abra archivos en el sistema de archivos de Linux desde Windows (es decir, no use aplicaciones de Windows para cambiar las cosas bajo% AppData% \ lxss). Mi respuesta y mi comentario anterior describen cómo abrir archivos de Windows dentro de los programas de Windows desde la línea de comandos WSL (por ejemplo, abrir "C: \ Users \ Username \ src \ example.txt" desde su ruta WSL "/ mnt / c / Users / Nombre de usuario / src / example.txt "). También hay un nuevo método que está saliendo. He actualizado mi respuesta para mostrar la distinción y el nuevo método.
Shane Lawrence
Shane, ¿cuál es el punto de usar el WSL si vas a editar archivos de Windows con binarios de Windows? ¿Por qué no solo usar windows?
Alex
Buenas noticias: WSL ahora puede editar archivos de Linux sin problemas con Win10 1903: devblogs.microsoft.com/commandline/… "En el pasado, la creación y el cambio de archivos de Linux desde Windows resultó en la pérdida de archivos o la corrupción de datos. característica muy solicitada y esperada desde hace mucho tiempo. Estamos orgullosos de anunciar que ahora puede acceder fácilmente a todos los archivos en sus distribuciones de Linux desde Windows ".
KERR
1

Estoy seguro de que personas más inteligentes que yo han analizado esta pregunta. Pero lo responderé. Sinceramente, creo que la respuesta es actualmente no. Hay una mejor manera de obtener lo mejor de ambos mundos, aparte de los que ha mencionado (que yo sepa).

Estoy seguro de que no es la respuesta que alguien quiere, pero creo que es la respuesta correcta. Sé que es algo que Microsoft está tratando de suavizar, pero aún no está allí.

trueCamelType
fuente
Y todavía no lo es.
hugo der hungrige
0

En la primera mitad de 2018, Microsoft lanzó algunas mejoras a WSL que abordan algunos de estos problemas:

Ninguno de estos aborda completamente los problemas en mi pregunta original, pero pueden mejorar la usabilidad en ciertos casos específicos.

Andrew Mao
fuente
¡Gracias! Mantenlo actualizado. Incluso estaría bien si me permitiera usar "con seguridad" mi editor de GUI favorito para seleccionar archivos, puedo vivir sin la integración adecuada de herramientas de compilación (podría hacerse desde la consola). Incluso los archivos "rsync-ing" temporales para copiar Windows local estarían bien siempre que se haga de forma transparente. Me estoy acercando a un punto molesto en el que es demasiado difícil editar y hacer un seguimiento de todos los archivos de la CLI (al menos para mí), y realmente solo quiero "hacer todo en Windows", enviar / copiar código a WSL , ejecute herramientas allí.
Dan M.
0

Si desea ejecutar comandos de Linux y editar con editores de Windows. Puede mantener su código fuente (que desea editar y probar), en algún lugar de su sistema de archivos (como c: \ source \) y acceder a eso en la consola de Linux a través de / mnt / c / source. Espero que esto ayude.

Eli
fuente
0

Ahora Visual Studio Code es compatible (como lo estoy usando). "Extensión WSL" que le permite realizar archivos / carpetas CRUD (Crear, leer, actualizar, eliminar) desde la ubicación de Linux. Aunque todavía estoy luchando por obtener la misma configuración para atom, que fue mi elección de editor para el desarrollo de aplicaciones Rails en la plataforma Linux.

usuario132929
fuente