TL; DR: A Microsoft não fez inicialmente possibilitar a execução do Windows Apps.
A partir do Insider Preview build 14951, anunciado em 19 de outubro de 2016, você pode executar programas nativos do Windows a partir do Bash no Ubuntu no Windows (WSL)
Windows binaries can now be invoked directly from the WSL command line. This gives users the ability to interact with their Windows environment and system in a way that has not been possible. As a quick example, it is now possible for users to run the following commands:
$ 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
O anúncio dizia
Windows Subsystem for Linux: Today we are happy to announce two large updates to WSL!
Official Ubuntu 16.04 support. Ubuntu 16.04 (Xenial) is installed for all new Bash on Ubuntu on Windows instances starting in build 14951. This replaces Ubuntu 14.04 (Trusty). Existing user instances will not be upgraded automatically. Users on the Windows Insider program can upgrade manually from 14.04 to 16.04 using the do-release-upgrade command.
Windows / WSL interoperability. Users can now launch Windows binaries directly from a WSL command prompt. This is the number one request from our users on the WSL User Voice page.
(minha ênfase)
Causa do erro
A mensagem
cannot execute binary file: Exec format error
Isso significa que o Bash está convencido de que o adb.exe é o tipo errado de arquivo para execução.
Para descobrir por que, tente usar:
file /mnt/c/Android/sdk/platform-tools/adb.exe
Por exemplo:
$ pwd
/mnt/c/Windows/System32
$ ./notepad.exe
bash: ./notepad.exe: cannot execute binary file: Exec format error
$ file notepad.exe
notepad.exe: PE32+ executable (GUI) x86-64, for MS Windows
Windows Susbsystem para Linux
Observe que os objetivos iniciais da WSL da Microsoft
foramUsing Bash, you can run command-line Linux tools and apps.
Observe que não inclui
- ferramentas e aplicativos gráficos do Linux (X11).
- Ferramentas e aplicativos do Windows.
binários de 32 bits
Acredito que o Windows Subsystem for Linux (WSL) da Microsoft atualmente suporta apenas binários ELF de 64 bits, não binários ELF de 32 bits.
Binários do Windows
Além disso, de esta pergunta parece que o WSL no momento de escrever esta resposta não suporte a execução de executáveis do Windows a partir do Bash.
Isso é confirmado por HowtoGeek
Unfortunately, there’s no way to actually launch a Windows program or run a Windows command from within a Bash script or the Bash shell. However, you can incorporate Bash commands into a Batch script or PowerShell script
Por que não: - (
Se você observar como a Microsoft fez isso, verá que Bash.exe
é um aplicativo nativo do modo de console do Windows que, na minha opinião, atua basicamente como um front end muito fino que se comunica com um não modificado /bin/bash
que faz toda a interpretação e execução dos comandos.
WSL ... is primarily comprised of:
- User mode session manager service that handles the Linux instance life cycle
- Pico provider drivers (lxss.sys, lxcore.sys) that emulate a Linux kernel by translating Linux syscalls
- Pico processes that host the unmodified user mode Linux (e.g. /bin/bash)
Como um / bin / bash não modificado não espera poder executar programas que não são nativos do Linux "ELF" binários, ele se opõe aos binários "PE" do Windows.
Eu certamente não quero acabar com o buraco da corrida do WINE sob a WSL. Eu sugiro que você evite essa ideia também.
Solução possível
Veja o projeto cbwin
Launch Windows programs from "Bash on Ubuntu on Windows" (WSL)
main features:
- Win32 command line tools in the console, invoked from WSL
- Win32 command line tools with redirections to WSL (stdin/stdout/stderr to or from pipe/file)
- suspend/resume propagation (Ctrl-Z suspends the Win32 processes, fg resumes them)
- exit codes propagation
- launch "detached" GUI Windows programs (uses start of cmd)