GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo puedo ejecutar un ejecutable de Windows desde WSL (Ubuntu) Bash?

En Windows 10 Creators Update (compilación 1703, abril de 2017), esto se admite de forma nativa. Ahora puede ejecutar binarios de Windows desde Linux...

notepad.exe o cualquier otro .exe (se necesita la extensión y debe estar en su ruta, algunas versiones anteriores necesitan la ruta completa)

...y viceversa usando uno de los siguientes:

  • bash.exe -c command_to_run es decir:bash.exe -c ls
  • bash -c command_to_run es decir:bash -c ls
  • wsl command_to_run es decir:wsl "ls"; o especifica la distribución que quieres usar para ejecutarla usando:
    • ubuntu run ls

Para obtener más información, consulte el artículo vinculado anterior.


por qué no simplemente usar

$ powershell.exe Start filename

Start es el equivalente de Windows a xdg-open en la mayoría de Linux o open en macOS, que significa "abrir con la aplicación de escritorio predeterminada". Me gusta ponerle un alias para abrirlo.


Solución nativa

La solución oficial provista con Windows 10 Insider Preview Update (14951) se basa en el casi olvidado binfmt_msc Facilidad de Linux para lanzar binarios. El comando de registro para binfmt_misc sería así (donde /init es el binfmt_misc provisional "intérprete" para los ejecutables win):

sudo echo ":WSLInterop:M::MZ::/init:" > /proc/sys/fs/binfmt_misc/register

Y luego el ejecutable win se iniciaría como programas normales:

$ 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

No es que cualquier ejecutable win deba residir en las ventanas (DrvFs ) sistema de archivos - no en el sistema de archivos de Linux (VolFs ) - para heredar un Windows adecuado directorio de trabajo.

El cbwin alternativa

Hasta que obtenga la última compilación, el proyecto cbwin ofrece una solución al instalar 3 nuevos comandos de Linux dentro de WSL:

  • wcmd :llama a un ejecutable win a través de cmd.exe .
  • wrun :llama a un ejecutable win sincrónicamente con CreateProcess y esperar a morir (sin usar cmd.exe ).
  • wstart :inicie un comando separado (asincrónicamente) (con el uso de cmd.exe ).

Para usarlos, debe:

  1. Instalar cbwin :<último>
  2. un nuevo outbash.exe se instalará en su sistema de archivos normal de Windows (en algún lugar de su %PATH% ), más
  3. los 3 comandos de Linux en el sistema de archivos WSL.
  4. Utilice este outbash.exe (donde sea que lo hayas instalado) para iniciar WSL, NO C:\Windows\System32\bash.exe !
  5. Prefije cualquier ejecutable win con uno de esos comandos, por ej. wrun notepad .

Consejo: Si el ejecutable se lanzó con wcmd o wrun genera niños, estos sobreviven solo mientras el ejecutable permanezca vivo.

En otras palabras, intentar iniciar notepad.exe con wcmd no funcionará, porque bloc de notas se eliminará justo después de haber sido lanzado -- Usa wrun (sincrónicamente) o wstart (asincrónicamente) en este caso.


Linux
  1. ¿Cómo configurar Bash para ejecutar *.exe con Mono?

  2. ¿Cómo ejecuto Ubuntu en Windows 10 en VirtualBox?

  3. (C/C++) ¿Cómo generar un archivo ejecutable que pueda ejecutarse tanto en Windows como en Linux?

  4. ¿Cómo puedo configurar y ejecutar PhantomJS en Ubuntu?

  5. ¿Cómo puedo ejecutar una función desde un script en la línea de comandos?

Cómo ejecutar Windows 95 en Linux

Cómo ejecutar aplicaciones de Linux en Windows 10 y 11 usando WSL

Cómo instalar Wine para ejecutar aplicaciones de Windows en Ubuntu

Cómo compartir una carpeta en Ubuntu para acceder desde Windows 10

Cómo ejecutar un script Bash

Si puedo, ¿cómo instalar Ubuntu desde Ubuntu?