¿Cómo uso Bash en Ubuntu en Windows (WSL) para mi terminal VS Code?

87

Mientras que otras preguntas tratan sobre cómo usar cosas como git-bash , darle un giro al nuevo WSL ya que el terminal para VS Code no es lo mismo: le da acceso a bash ejecutándose en un subsistema Ubuntu Linux real, en lugar de git- terminal bash que se ejecuta en el subsistema de Windows.

Entonces, ¿cómo lo hacemos funcionar como terminal de VS Code y, en particular, cómo lo hacemos funcionar como terminal de entorno de desarrollo funcional?

A diferencia de git-bash, desafortunadamente esto no es tan simple, porque la configuración de Ubuntu Linux en WSL puede proporcionar algunos errores, como que NPM intenta (y falla) ejecutarse desde su directorio de Archivos de programa de Windows debido a la interacción entre WSL y Windows mismo en términos de ruta, y algunos paquetes como Compass fallan por razones que no son necesariamente obvias de inmediato para alguien que no está acostumbrado a desarrollar en Linux. ¿Cuál es una forma sencilla de tener un entorno de terminal WSL confiable para VS Code donde las herramientas más utilizadas se ejecutarán cuando se instalen a través de apt-geto npm?

taswyn
fuente

Respuestas:

184

Esta respuesta busca ayudar a otros a evitar pasar de 1 a 2 horas solucionando problemas y encontrando lentamente soluciones dispares para problemas comunes al usar WSL para el terminal en VS Code. No cubre la instalación de paquetes específicos, sino más bien los comunes que pueden no instalarse correctamente como dependencias al instalar cosas que dependen de su presencia y al corregir configuraciones comunes relacionadas.

Resumen de pasos

  • WSL instalado
  • VS Code (u otro IDE) configurado para terminal
  • NPM instalado y corrección de ruta en .profile (puede ayudar con otras herramientas)
  • build-essential instalado (ayuda con cualquier herramienta que use make / gcc / etc)
  • Tareas de VS Code usando WSL
  • Extras

Introducción y requisitos

  • Debe tener WSL instalado . (Lo que significa que debe ejecutar Windows 10 de 64 bits , con las actualizaciones adecuadas) Siga la guía de instalación si aún no está instalada. Esto requerirá algunos reinicios.

Configuración del terminal de código VS

O el atajo de teclado CTRL+ ,, o FilePreferencesSettings

En la parte superior derecha de la ventana de edición, asegúrese de estar trabajando en el contexto correcto para usted: Configuración del usuario o Configuración del espacio de trabajo .

ingrese la descripción de la imagen aquí

En la barra de búsqueda de configuración, escriba terminal.integrated.shell.windows(o lo que sea que lo lleve lo suficientemente lejos)

Busque la configuración en el archivo de configuración real, use Edit(mouse sobre la línea, estará a la izquierda: en una pantalla táctil sin mouse, debería poder simplemente tocar a la izquierda de la línea) y seleccioneReplace in Settings

ingrese la descripción de la imagen aquí

En el panel derecho, modifique la entrada creada en el archivo json modificado: reemplace la configuración anterior con

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

ingrese la descripción de la imagen aquí

Otros IDE: IntelliJ

Abra Configuración / Herramientas / Terminal y configure el campo "Ruta de Shell" en "C:\Users\USERNAME\AppData\Local\Microsoft\WindowsApps\ubuntu.exe"

Hacer que su terminal WSL Ubuntu Bash sea funcional para desarrolladores

Cuando usa CTRL+ `para abrir la terminal, ahora debería tener una terminal bash.

Si es la primera vez que ejecuta bash.exe, es posible que se le pregunte sobre la instalación de Ubuntu. Hágalo. Una vez que se complete la instalación, elija su nombre de usuario y contraseña para usar en WSL Ubuntu. Estos no tienen que coincidir con su cuenta actual de Windows y es importante tener en cuenta que no cambiarán según los cambios en la contraseña de su cuenta de Windows.

Una vez que haya terminado, tendrá un símbolo del sistema bash en su terminal.ingrese la descripción de la imagen aquí

Tenga en cuenta que, a diferencia de git-bash en Windows, este es un entorno independiente. Si bien se puede usar para iniciar software de Windows fuera de sí mismo, necesitará los paquetes de Ubuntu adecuados para ejecutarlos dentro de la terminal real.

Actualmente, WSL no viene cargado con todo lo que podría esperar o estar acostumbrado a tener, y algunas cosas pueden entrar en conflicto con el software que ha cargado en Windows, según la configuración de perfil predeterminada.

Actualizaciones y git

Nota: Voy a documentarlos como sudo para las personas que simplemente necesitan partes individuales de esto, pero una opción al principio es sudo susimplemente ejecutar los siguientes comandos sin sudo.

Asegúrese de que sus paquetes de Ubuntu estén actualizados:

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

Instalar git:

sudo apt-get install git

Node.js y NPM

Si ya tiene Node o NPM cargado en Windows, ejecutarlos en Ubuntu puede resultar problemático debido a problemas de ruta. Por lo tanto, debe instalar las versiones nativas de Ubuntu y asegurarse de que se utilicen en su lugar.

Primero, instale node.js con NPM . (alternativo: instale NVM y utilícelo para instalar node.js)

Después de la instalación, la ejecución de los comandos npm probablemente fallará: por ejemplo, npm -vprobablemente le dará:

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

Esto se debe a un problema de ruta con una solución bastante sencilla . Usando su editor CLI favorito (como nano, vim, emacs, caty sed... etc), abra su~/.profile

nano ~/.profile

Nota: NO intente editar archivos de Linux con herramientas de Windows . (Gracias al comentario de @ david-c-rankin por el enlace oficial con el texto rojo en negrita que explica esto) Si no desea utilizar un editor CLI para esto en la terminal, consulte la parte inferior de esta publicación para obtener un enlace sobre cómo para ejecutar una GUI.

Actualmente, la variable PATH de bash predeterminada en WSL es

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

Que está inyectando la ruta de Windows después de los dos primeros directorios binarios. Desafortunadamente, esto no da como resultado que / usr / bin se use antes de que Windows instale npm, así que agréguelo antes del $ PATH final:

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

Guarde y luego vuelva a cargar el terminal o simplemente obtenga el archivo de ruta

source ~/.profile

Construir-esencial

Si está utilizando algo que requiera compilación o utilice make, es casi seguro que los necesitará instalados; así que si no los instaló mientras instalaba node.js, hágalo. Es mucho más fácil simplemente usar el paquete esencial de compilación en lugar de intentar instalar todo por separado.

Tenga en cuenta que los paquetes como Compass que se basan en Ruby FFI fallarán sin estos. Si tiene problemas para instalar y ejecutar correctamente una herramienta, asegurarse de tener instalado gcc y make puede ser un buen lugar para comenzar.

sudo apt-get install -y build-essential

Ejecución de tareas con Ubuntu

Tenga en cuenta que si usa tasks.json de VS Code para ejecutar tareas de compilación, de forma predeterminada aún las ejecutará usando el subsistema de Windows en lugar del de Ubuntu. A veces, esto puede ser lo que desea, pero si acaba de terminar de instalar grunt-cli en Ubuntu y no en Windows, probablemente no lo sea.

VS Code recientemente tuvo la actualización de mayo de 2017 sobre cómo funcionan las Tareas que le permite configurar el ejecutor de tareas como terminal . Esta es, con mucho, la forma más fácil de migrar tareas.

Simplemente configure

"runner": "terminal",

en su tasks.jsony ya está (asumiendo que tiene todas las herramientas apropiadas que está intentando ejecutar ahora instaladas en WSL Ubuntu).ingrese la descripción de la imagen aquí

Esto es muy portátil, idealmente no requiere cambios entre sistemas que tienen o no tienen WSL, u otros sistemas operativos, y es el método que recomendaría.

Por el momento, este método genera otra TERMINALinstancia de pestaña (a la que se accede desde el menú desplegable). Aún puede configurar los observadores adecuados, pero eso significa que ya no está en la OUTPUTpestaña.

El método antiguo es capaz de invocar el shell WSL Ubunutu Bash y hacer que aparezca OUTPUT, e implica llamar a bash.exe con el argumento -c o usar un script de shell. Desafortunadamente, no es tan semántico, ya que estamos creando bashnuestro comando y pasándole lo que queremos ejecutar como argumento. Esto también significa que no se puede trasladar tan rápidamente a otros sistemas.

Puede usar la misma ubicación que le dio a VS Code anteriormente para el terminal en sí, C:\\WINDOWS\\Sysnative\\bash.execomo valor paracommandingrese la descripción de la imagen aquí

Establezca el primer elemento de la argsmatriz como -cy el segundo como el comando que desea ejecutar ( crédito a la segunda mitad de esta respuesta ).

Alternativamente, puede ejecutar un script de shell como se ve aquí .

Más bits útiles

¿Quiere iniciar VSCode en Windows desde la línea de comandos de WSL Bash ?

¿Quiere tener una interfaz gráfica para su WSL Ubuntu ? (esto le permitirá hacer cosas como usar un editor de GUI de Linux para archivos dentro del propio sistema Ubuntu: no los edite usando las herramientas de edición de Windows, vea los comentarios / nota en la sección de npm)

¿Desea compilar (consulte la parte anterior sobre cómo configurar las tareas de código VS correctamente para WSL) y depurar completamente dentro de WSL Ubuntu ? (esto muestra cómo hacerlo usando gdb, pero el pipeTransportconcepto podría usarse con otros depuradores) (crédito a esta respuesta , pero la anterior también proporciona un método que usa loopback local que podría resultar útil)

taswyn
fuente
10
Buena respuesta, también es útil proporcionar el aviso No cambie los archivos de Linux usando aplicaciones y herramientas de Windows a los nuevos usuarios de WSL. Esto puede ser una gran sorpresa.
David C. Rankin
1
Gran reseña, gracias! No estoy seguro si ha visto esto, pero también hay una entrada de registro que puede hacer para evitar que Windows PATH se inyecte en Bash, lo que puede ser más fácil para muchos usuarios de Windows que editar manualmente su .profile.
Tobias J
3
@ChangQian la razón de esto es que cuando se lanzó Windows de 64 bits, agregaron un redirector del sistema de archivos para programas de 32 bits, porque System32 estaba reservado para dlls / software de 64 bits. Esto da como resultado aplicaciones de 32 bits que intentan acceder a System32 en lugar de acceder a SysWOW64 (sí, parece al revés). Sysnative fuerza a que esto no suceda, pero no aparece en software de 64 bits * como Explorer. Puede ver un ejemplo de esto usando el símbolo del sistema de 32 bits: C:\Windows\SysWOW64\cmd.exey ejecutando dir C:\Windows\Sysnative * Esto funciona en VSCode de 64 bits porque está codificado para traducirlo automáticamente
taswyn
2
Cuando configura su terminal ubuntu.exe, puede terminar en su carpeta de usuario en lugar de en la carpeta del proyecto. Es por eso que desea configurar su terminal de C:\\Windows\\System32\\wsl.exeacuerdo con github.com/Microsoft/WSL/issues/2795 Use wslconfig /setdefault Ubuntupara asegurarse de que comience la instalación correcta.
Bernhard Döbler
1
Cuando escribí esto fue cuando WSL estaba mucho más bloqueado (antes de la elección de distribución / etc.). Tengo una máquina con una instalación nueva de Windows que se ha actualizado al menos a la edición de Spring Creator, por lo que finalmente echaré un vistazo en breve a las mejoras que se pueden realizar según varios comentarios e intentaré responder a su pregunta, @Narnia.
Taswyn
4

si desea utilizar zsh, busque la ruta de ubuntu1804.exe o ubuntu1604.exe.

en mi caso

"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
fuente
Funcionó bien en la versión 1.32 del código de Visual Studio y WSL con ubuntu. ¡Gracias!
Salvador P.