Modifica dei file in un sottosistema Windows per ambiente di sviluppo Linux


23

Il sottosistema Windows per Linux (WSL) funziona abbastanza bene per rendere disponibili la maggior parte degli strumenti Linux a riga di comando e lavorare su Windows senza modifiche. Tuttavia, diventa un po 'complicato per lo sviluppo, quando si vuole

  • Costruisci un progetto usando una toolchain Linux che non ha un equivalente di Windows ben supportato (Ruby, Node, ecc.)
  • Modifica i file utilizzando un editor GUI basato su Windows come il codice di Visual Studio.

Il problema è che le app di Windows non possono modificare i file all'interno del filesystem lxss virtuale . La modifica diretta di questi file causa problemi di ogni genere.

Pertanto, sembrano esserci solo due scelte non ottimali quando si tratta di utilizzare WSL per lo sviluppo:

  1. Archivia il progetto in lxss ( /home/foo). La normale toolchain funziona correttamente. Tuttavia, la modifica è limitata a Vim / Emacs basata su terminali o qualsiasi altra cosa possa essere eseguita su un server X janky , che è meno fluido degli editor nativi in ​​esecuzione su Windows.

  2. Archivia il progetto nel filesystem di Windows ( /mnt/c/Users/foo). Ora è possibile utilizzare qualsiasi editor basato su Windows per lo sviluppo. Tuttavia, la toolchain basata su Linux è fragile in quanto non è progettata per essere utilizzata su un "drive di rete" e può causare problemi con la visualizzazione di file o database .

C'è un modo per ottenere il meglio da entrambi i mondi qui, ovvero per essere in grado di modificare utilizzando un'applicazione Windows nativa, ma avere comunque la toolchain di Linux funzionante come farebbe normalmente su un'unità locale?

Risposte:


4

Microsoft ha recentemente aggiunto un supporto completo per questo, e dovrebbe essere generalmente disponibile nell'aggiornamento di aprile 2019 (19H1). Una volta pronto, un server 9P verrà eseguito in background ogni volta che è in esecuzione una distribuzione Linux. Il server 9P sarà in grado di gestire i metadati del filesystem Linux e Windows sarà in grado di trattarlo come un'unità di rete in modo che possa accedervi in ​​modo sicuro. Puoi leggerlo su https://blogs.msdn.microsoft.com/commandline/2019/02/15/whats-new-for-wsl-in-windows-10-version-1903/ .

Con la nuova funzionalità, sarai in grado di accedere in sicurezza ai file di file system Windows e Linux da Windows, purché passi attraverso il server 9P. Questo sarà gestito in modo nativo da WSL. Ad esempio, dalla riga di comando WSL sarai in grado di digitare code /mnt/c/Users/username/src/windows-file.txtper aprire un file Windows in VS Code o digitare code /home/username/src/linux-file.txtper aprire un file Linux in VS Code.

Se non fai parte del Programma Windows Insider, non avrai ancora accesso a questo, quindi dovrai comunque utilizzare un metodo più vecchio, come wslpath.

wslpath convertirà tra percorsi in stile Windows e Linux in modo da poter aprire facilmente i file Windows dalla riga di comando WSL. Secondo https://github.com/Microsoft/WSL/issues/3146#issuecomment-388118689 , rifiuterà di convertire i percorsi del filesystem Linux (ovvero% AppData% \ lxss), perché senza 9P non è sicuro modificare questi file da Windows . Questo significa che non puoi aprire /home/username/src/linux-file.txt, ma puoi usare code "$(wslpath -aw /mnt/c/Users/username/src/windows-file.txt)".

In passato, c'erano diversi strumenti di terze parti per eseguire la stessa conversione, ma wslpath lo fa in modo nativo, infatti ls -l /bin/wslpathdimostra che è solo un collegamento a / init.


@alex wsltools può convertire i percorsi Linux nei loro equivalenti di Windows. In questo modo, puoi aprire un programma Windows dalla riga di comando di Linux e dirgli di aprire un file sul filesystem di Windows.
Shane Lawrence,

Non la penso così. blogs.msdn.microsoft.com/commandline/2016/11/17/… . Potete fornire qualche riferimento che sia sicuro farlo?
Alex

@alex grazie per averlo sollevato. Questo è un buon punto per chiarire. Il link che hai condiviso (che è anche nella domanda di OP) ti dice di non aprire i file nel filesystem Linux da Windows (cioè non usare le app di Windows per cambiare le cose in% AppData% \ lxss). La mia risposta e il mio precedente commento descrivono entrambi come aprire i file Windows all'interno dei programmi Windows dalla riga di comando WSL (ad es. Aprire "C: \ Users \ Username \ src \ example.txt" dal suo percorso WSL "/ mnt / c / Users / Nome utente / src / example.txt "). C'è anche un nuovo metodo in uscita. Ho aggiornato la mia risposta per mostrare la distinzione e il nuovo metodo.
Shane Lawrence,

Shane, che senso ha usare WSL se hai intenzione di modificare i file di Windows con i binari di Windows? Perché non usare solo Windows?
Alex

Buone notizie: WSL ora può modificare i file Linux senza problemi con Win10 1903: devblogs.microsoft.com/commandline/… "In passato, la creazione e la modifica di file Linux da Windows ha comportato la perdita di file o la corruzione dei dati. Rendere possibile questo è stato un funzionalità molto richiesta e molto attesa. Siamo orgogliosi di annunciare che ora puoi accedere facilmente a tutti i file nelle tue distribuzioni Linux da Windows. "
KERR

1

Sono sicuro che le persone più intelligenti di me abbiano esaminato questa domanda. Ma risponderò. Onestamente credo che la risposta sia attualmente no. C'è un modo migliore per ottenere il meglio da entrambi i mondi, oltre a quelli che hai menzionato (che io conosco).

Sono sicuro che non è la risposta che tutti vogliono, ma penso che sia la risposta corretta. So che è qualcosa che Microsoft sta cercando di rendere più fluido, ma non è ancora lì.


E ancora non lo è.
hugo der hungrige,

0

Nella prima metà del 2018, Microsoft ha rilasciato alcuni miglioramenti a WSL che risolvono alcuni di questi problemi:

Nessuno di questi due aspetti affronta interamente i problemi della mia domanda iniziale, ma possono migliorare l'usabilità in alcuni casi specifici.


Grazie! Tienilo aggiornato. Andrei anche bene se mi permettesse "in sicurezza" di utilizzare il mio editor GUI preferito per selezionare i file, posso vivere senza una corretta integrazione degli strumenti di build (potrebbe essere fatto dalla console). Anche temporaneamente "rincronizzare" i file nella copia locale di Windows andrebbe bene purché sia ​​fatto in modo trasparente. Mi sto avvicinando a un punto fastidioso in cui è troppo difficile modificare e tenere traccia di tutti i file dalla CLI (almeno per me), e voglio solo "fare tutto su Windows," inviare / copiare "il codice a WSL , esegui gli strumenti lì.
Dan M.

0

Se si desidera eseguire i comandi di Linux e modificarli con gli editor di Windows. Potresti conservare il tuo codice sorgente (che vuoi modificare e testare), da qualche parte nel tuo file system (come c: \ source \) e accedere a quello nella console di Linux tramite / mnt / c / source. Spero che sia di aiuto.


0

Ora supporta Visual Studio Code (come lo sto usando). "Estensione WSL" che consente di eseguire file / cartelle CRUD (creare, leggere, aggiornare, eliminare) dalla posizione di Linux. Anche se faccio ancora fatica a ottenere la stessa configurazione per Atom, che è stata la mia scelta di editor per lo sviluppo di applicazioni Rails su piattaforma Linux.

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.