In Windows 10 Creators Update (build 1703, aprile 2017), questo è supportato nativamente. Quindi ora puoi eseguire i binari di Windows da Linux...
notepad.exe
o qualsiasi altro .exe
(l'estensione è necessaria e deve essere sul tuo percorso, alcune versioni precedenti richiedono l'intero percorso)
...e viceversa utilizzando uno dei seguenti:
bash.exe -c command_to_run
es:bash.exe -c ls
bash -c command_to_run
es:bash -c ls
wsl command_to_run
es:wsl "ls"
; o specifica la distribuzione che vuoi usare per eseguirla usando:ubuntu run ls
Per ulteriori informazioni, vedere l'articolo collegato sopra.
perché non usare solo
$ powershell.exe Start filename
Start
è l'equivalente Windows di xdg-open
sulla maggior parte dei Linux o open
su macOS, che significa "apri con l'applicazione desktop predefinita". Mi piace chiamarlo open.
Soluzione nativa
La soluzione ufficiale fornita con Windows 10 Insider Preview Update (14951) si basa sul quasi dimenticato binfmt_msc Funzionalità Linux per l'avvio di binari. Il comando di registrazione per binfmt_misc sarebbe così (dove /init
è il binfmt_misc provvisorio "interprete" per gli eseguibili win):
sudo echo ":WSLInterop:M::MZ::/init:" > /proc/sys/fs/binfmt_misc/register
E poi win-executable verrebbe lanciato come programmi normali:
$ export PATH=$PATH:/mnt/c/Windows/System32
$ notepad.exe
$ ipconfig.exe | grep IPv4 | cut -d: -f2
$ ls -la | findstr.exe foo.txt
$ cmd.exe /c dir
Non che qualsiasi eseguibile win debba risiedere nelle finestre (DrvFs ) file system - non sul file system di Linux (VolFs ) - per ereditare un Windows appropriato directory-di-lavoro.
Il cbwin alternativa
Fino a quando non ottieni l'ultima build, il progetto cbwin offre una soluzione alternativa, installando 3 nuovi comandi Linux all'interno di WSL:
wcmd
:chiama un eseguibile win tramitecmd.exe
.wrun
:richiama un eseguibile win in modo sincrono conCreateProcess
e aspetta di morire (non usandocmd.exe
).wstart
:avvia un comando separato (in modo asincrono) (con l'uso dicmd.exe
).
Per poterli utilizzare, devi:
- Installa cbwin :
- un nuovo
outbash.exe
verrà installato nel normale filesystem di Windows (da qualche parte nel file%PATH%
), più - i 3 comandi linux nel filesystem WSL.
- un nuovo
- Usa questo
outbash.exe
(ovunque sia stato installato) per avviare WSL, NONC:\Windows\System32\bash.exe
! - Anteponi a qualsiasi eseguibile win uno di questi comandi, ad es.
wrun notepad
.
Suggerimento: Se l'eseguibile è stato avviato con wcmd
o wrun
genera tutti i bambini, questi sopravvivono solo finché l'eseguibile rimane vivo.
In altre parole, cercando di avviare notepad.exe
con wcmd
non funzionerà, perché blocco note verrà ucciso subito dopo essere stato lanciato -- Usa wrun
(in modo sincrono) o wstart
(in modo asincrono) in questo caso.