Come si usa Bash su Ubuntu su Windows (WSL) per il mio terminale VS Code?


87

Mentre altre domande riguardano come usare cose come git-bash , dare al nuovo WSL un giro come terminale per VS Code non è lo stesso: ti dà accesso a bash in esecuzione su un effettivo sottosistema Ubuntu Linux, invece di git- terminale bash in esecuzione sul sottosistema Windows.

Quindi come facciamo a farlo funzionare come terminale VS Code, e in particolare come facciamo a farlo funzionare come terminale di ambiente di sviluppo funzionale?

A differenza di git-bash, questo purtroppo non è così semplice, perché la configurazione di Ubuntu Linux in WSL può fornire alcuni trucchi, come NPM che tenta (e non riesce) di eseguire dalla directory dei file di programma di Windows a causa dell'interazione tra WSL e Windows stesso in termini di pathing, e alcuni pacchetti come Compass falliscono per ragioni non necessariamente immediatamente ovvie per qualcuno che non è abituato a sviluppare su Linux. Qual è un modo semplice per avere un ambiente terminale WSL affidabile per VS Code in cui gli strumenti utilizzati più di frequente verranno eseguiti se installati tramite apt-geto npm?

Risposte:


184

Questa risposta cerca di aiutare gli altri a evitare di spendere 1-2 ore per la risoluzione dei problemi e di trovare lentamente soluzioni disparate per problemi comuni quando si usa WSL per il terminale in VS Code. Non copre l'installazione di pacchetti specifici, ma piuttosto quelli comuni che potrebbero non essere installati correttamente come dipendenze quando si installano cose che si basano sulla loro presenza e sulla correzione delle impostazioni comuni correlate.

Riepilogo dei passaggi

  • WSL installato
  • VS Code (o altro IDE) configurato per il terminale
  • NPM installato e correzione del percorso in .profile (può aiutare con altri strumenti)
  • build-essential installato (aiuta con tutti gli strumenti che usano make / gcc / etc)
  • VS Code Tasks utilizzando WSL
  • Extra

Guida introduttiva e requisiti

  • Devi avere WSL installato . (Il che significa che devi eseguire Windows 10 a 64 bit , con gli aggiornamenti appropriati) Segui la guida all'installazione se non è già installato. Ciò richiederà alcuni riavvii.

Configurazione terminale VS Code

O la scorciatoia da tastiera CTRL+ ,o FilePreferencesSettings

In alto a destra della finestra di modifica, assicurati di lavorare nel contesto corretto per te: Impostazioni utente o Impostazioni area di lavoro .

inserisci qui la descrizione dell'immagine

Nella barra di ricerca delle impostazioni, digita terminal.integrated.shell.windows(o qualsiasi cosa ti porti abbastanza lontano)

Trova l'impostazione nel file delle impostazioni effettive, usa Edit(il mouse sulla riga, sarà sulla sinistra: su un touch screen senza mouse, dovresti essere in grado di toccare semplicemente a sinistra della riga) e selezionareReplace in Settings

inserisci qui la descrizione dell'immagine

Nel riquadro di destra, modifica la voce creata nel file json modificato: sostituisci l'impostazione precedente con

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

inserisci qui la descrizione dell'immagine

Altri IDE: IntelliJ

Apri Impostazioni / Strumenti / Terminale e imposta il campo "Percorso shell" su "C:\Users\USERNAME\AppData\Local\Microsoft\WindowsApps\ubuntu.exe"

Rendere il tuo terminale WSL Ubuntu Bash funzionale per dev

Quando usi CTRL+ `per aprire il terminale, ora dovresti avere un terminale bash.

Se è la prima volta che esegui bash.exe, ti potrebbe essere chiesto di installare Ubuntu. Fare così. Una volta completata l'installazione, scegli il nome utente e la password da utilizzare in WSL Ubuntu. Questi non devono coincidere con il tuo account Windows corrente ed è importante notare che non cambieranno in base alle modifiche alla password del tuo account Windows.

Una volta che hai finito, avrai un prompt dei comandi bash nel tuo terminale.inserisci qui la descrizione dell'immagine

Nota che a differenza di git-bash su Windows, questo è un ambiente separato. Sebbene possa essere utilizzato per avviare il software Windows al di fuori di se stesso, avrai bisogno di pacchetti Ubuntu appropriati per eseguirli all'interno del terminale effettivo.

Attualmente, WSL non viene caricato con tutto ciò che potresti aspettarti o a cui sei abituato, e alcune cose possono entrare in conflitto con il software caricato in Windows, in base alle impostazioni del profilo predefinito.

Aggiornamenti e git

Nota: li documenterò come sudo per le persone che hanno semplicemente bisogno di singoli pezzi di questo, ma un'opzione all'inizio è invece quella di sudo sueseguire semplicemente i seguenti comandi senza sudo.

Assicurati che i tuoi pacchetti Ubuntu siano aggiornati:

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

Installa git:

sudo apt-get install git

Node.js e NPM

Se hai già Node o NPM caricati in Windows, eseguirli in Ubuntu può diventare problematico a causa di problemi di percorso. Quindi, è necessario installare le versioni native di Ubuntu e assicurarsi che vengano invece utilizzate.

Innanzitutto, installa node.js con NPM . (alternativo: installa NVM e usalo per installare node.js)

Dopo l'installazione, l'esecuzione dei comandi npm probabilmente fallirà: ad esempio, npm -vprobabilmente ti 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")

Ciò è dovuto a un problema di percorso con una soluzione abbastanza semplice . Utilizzando il vostro editor preferito CLI (come nano, vim, emacs, cate sed... ecc), aprire il~/.profile

nano ~/.profile

Nota: NON tentare di modificare i file Linux utilizzando gli strumenti di Windows . (Grazie al commento di @ david-c-rankin per il collegamento ufficiale con il testo rosso in grassetto che lo spiega) Se non si desidera utilizzare un editor CLI per questo nel terminale, vedere in fondo a questo post un collegamento su come per ottenere una GUI in esecuzione.

Attualmente, la variabile PATH bash predefinita in WSL è

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

Che sta iniettando il percorso di Windows dopo le prime due directory binarie. Sfortunatamente, questo non fa sì che / usr / bin venga utilizzato prima di Windows installato npm, quindi aggiungilo prima del $ PATH finale:

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

Salvare e quindi ricaricare il terminale o semplicemente generare il file del percorso

source ~/.profile

Costruire essenziale

Se stai usando qualcosa che richiede la compilazione o altrimenti usa make, è quasi garantito che avrai bisogno di questi installati; quindi se non li hai installati durante l'installazione di node.js, fallo. È molto più facile usare semplicemente il pacchetto essenziale per la compilazione piuttosto che provare a installare tutto separatamente.

Nota che pacchetti come Compass che si basano su Ruby FFI non funzioneranno senza di essi. Se hai problemi a installare ed eseguire correttamente uno strumento, assicurarti di avere gcc e make installati può essere un buon punto di partenza.

sudo apt-get install -y build-essential

Esecuzione di attività utilizzando Ubuntu

Si noti che se si utilizza task.json di VS Code per eseguire attività di compilazione, per impostazione predefinita verranno comunque eseguite utilizzando il sottosistema di Windows anziché quello di Ubuntu. A volte questo può essere quello che vuoi, ma se hai appena finito di installare grunt-cli in Ubuntu e non in Windows, probabilmente non lo è.

VS Code ha recentemente ricevuto l'aggiornamento di maggio 2017 sul funzionamento di Tasks che gli consente di impostare il task runner come terminale . Questo è di gran lunga il modo più semplice per migrare le attività.

Semplicemente impostato

"runner": "terminal",

nel tuo tasks.jsone il gioco è fatto (supponendo che tu abbia tutti gli strumenti appropriati che stai cercando di eseguire ora installati in WSL Ubuntu).inserisci qui la descrizione dell'immagine

Questo è molto portabile, idealmente non richiede modifiche tra sistemi che hanno o non hanno WSL, o ad altri sistemi operativi, ed è il metodo che consiglierei.

Al momento, questo metodo genera un'altra TERMINAListanza di scheda (accessibile dal menu a discesa). Puoi ancora impostare watcher appropriati, ma significa che non è più presente nella OUTPUTscheda.

Il vecchio metodo è in grado di invocare la shell WSL Ubunutu Bash e di visualizzarla OUTPUT, e prevede la chiamata di bash.exe con l'argomento -c o l'utilizzo di uno script di shell. Sfortunatamente non è così semantico, dal momento che stiamo eseguendo il bashnostro comando e passandolo invece ciò che vogliamo eseguire come argomento. Ciò significa anche che non è facilmente trasportabile su altri sistemi.

Puoi utilizzare la stessa posizione che hai fornito in precedenza a VS Code per il terminale stesso, C:\\WINDOWS\\Sysnative\\bash.execome valore percommandinserisci qui la descrizione dell'immagine

Imposta il primo elemento argsdell'array come -ce il secondo come comando che desideri eseguire ( credito alla seconda metà di questa risposta ).

In alternativa, puoi invece eseguire uno script di shell come mostrato qui .

Ulteriori informazioni utili

Vuoi avviare VSCode in Windows dalla riga di comando di WSL Bash ?

Vuoi avere un'interfaccia grafica per il tuo WSL Ubuntu ? (questo ti permetterà di fare cose come usare un editor GUI Linux per i file all'interno del sistema Ubuntu stesso: non modificarli usando gli strumenti di modifica di Windows, vedi commenti / note nella sezione su npm)

Vuoi compilare (vedere la parte precedente sulla configurazione corretta di VS Code Tasks per WSL) ed eseguire il debug interamente in WSL Ubuntu ? (questo mostra come farlo usando gdb, ma il pipeTransportconcetto potrebbe essere usato con altri debugger) (credito a questa risposta , ma quella prima fornisce anche un metodo che utilizza il loopback locale che potrebbe rivelarsi utile)


10
Buona risposta, è utile fornire anche l'avviso Non modificare i file Linux utilizzando app e strumenti Windows ai nuovi utenti WSL. Questo può essere una vera sorpresa.
David C. Rankin,

1
Ottimo commento, grazie! Non sono sicuro di averlo visto, ma c'è anche una voce di registro che puoi creare per impedire che il PATH di Windows venga iniettato in Bash, il che potrebbe essere più facile per molti utenti Windows rispetto alla modifica manuale dei file .profile.
Tobias J

3
@ChangQian il motivo è che quando è stato rilasciato Windows a 64 bit, hanno aggiunto un redirector del file system per i programmi a 32 bit, perché System32 era riservato per dll / software a 64 bit. Ciò si traduce in app a 32 bit che tentano di accedere a System32 invece di accedere a SysWOW64 (sì, sembra al contrario). Sysnative impone che ciò non accada, ma non viene visualizzato in software a 64 bit * come Explorer. Puoi vedere un esempio di ciò utilizzando il prompt dei comandi a 32 bit: C:\Windows\SysWOW64\cmd.exee in esecuzione dir C:\Windows\Sysnative * Funziona in VSCode a 64 bit perché è codificato per tradurlo automaticamente
taswyn

2
Quando imposti il ​​tuo terminale ubuntu.exe, potresti finire nella tua cartella utente invece che nella cartella del progetto. Ecco perché vuoi impostare il tuo terminale in C:\\Windows\\System32\\wsl.exebase a github.com/Microsoft/WSL/issues/2795 Usa wslconfig /setdefault Ubuntuper assicurarti che inizi l'installazione corretta.
Bernhard Döbler

1
Quando ho scritto questo è stato quando WSL era molto più bloccato (prima della scelta della distribuzione / ecc.). Ho una macchina con una nuova installazione di Windows che è stata aggiornata almeno all'edizione di Spring Creator, quindi finalmente darò uno sguardo reale a breve a quali miglioramenti possono essere apportati ai vari commenti e proverò a rispondere alla tua domanda, @Narnia.
taswyn

4

se vuoi usare zsh, trova il percorso di ubuntu1804.exe o ubuntu1604.exe.

nel mio 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",

Ha funzionato bene sulla versione 1.32 del codice di Visual Studio e WSL con Ubuntu. Grazie!
Salvador P.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.