GNU/Linux >> Linux Esercitazione >  >> Linux

Come posso eseguire un eseguibile Windows da WSL (Ubuntu) Bash

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 tramite cmd.exe .
  • wrun :richiama un eseguibile win in modo sincrono con CreateProcess e aspetta di morire (non usando cmd.exe ).
  • wstart :avvia un comando separato (in modo asincrono) (con l'uso di cmd.exe ).

Per poterli utilizzare, devi:

  1. 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.
  2. Usa questo outbash.exe (ovunque sia stato installato) per avviare WSL, NON C:\Windows\System32\bash.exe !
  3. 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.


Linux
  1. Come faccio a eseguire Ubuntu su Windows 10 su VirtualBox?

  2. Come posso eseguire un'applicazione OpenGL installata su una macchina Linux dalla mia macchina Windows?

  3. (C/C++) Come generare un file eseguibile che può essere eseguito su Windows e Linux?

  4. Come posso configurare ed eseguire PhantomJS su Ubuntu?

  5. Come posso eseguire una funzione da uno script nella riga di comando?

Come eseguire Windows 95 su Linux

Come eseguire app Linux su Windows 10 e 11 utilizzando WSL

Come installare Wine per eseguire applicazioni Windows in Ubuntu

Come condividere una cartella su Ubuntu per accedere da Windows 10

Come eseguire uno script Bash

Se posso, come installare Ubuntu da Ubuntu?