GNU/Linux >> Znalost Linux >  >> Linux

Jak mohu spustit spustitelný soubor Windows z WSL (Ubuntu) Bash

V aktualizaci Windows 10 Creators Update (sestavení 1703, duben 2017) je to nativně podporováno. Nyní tedy můžete spouštět binární soubory Windows z Linuxu...

notepad.exe nebo jakýkoli jiný .exe (rozšíření je potřeba a musí být na vaší cestě, některé starší verze potřebují celou cestu)

...a naopak pomocí jednoho z následujících:

  • bash.exe -c command_to_run tj.:bash.exe -c ls
  • bash -c command_to_run tj.:bash -c ls
  • wsl command_to_run tj.:wsl "ls"; nebo zadejte distribuci, kterou chcete použít ke spuštění, pomocí:
    • ubuntu run ls

Další informace naleznete ve výše odkazovaném článku.


proč nepoužít

$ powershell.exe Start filename

Start je Windows ekvivalentní k xdg-open na většině linuxů nebo open na macOS, což znamená „otevřít pomocí výchozí desktopové aplikace“. Rád bych to alias otevřel.


Nativní řešení

Oficiální řešení poskytované s aktualizací Windows 10 Insider Preview Update (14951) je založen na téměř zapomenutém binfmt_msc Linuxové zařízení pro spouštění binárních souborů. Registrační příkaz pro binfmt_misc by bylo takto (kde /init je provizorní binfmt_misc "interpret" pro win-spustitelné soubory):

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

A pak by se win-executable spustil jako běžné programy:

$ 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

Ne, že jakýkoli spustitelný soubor win musí být umístěn v oknech (DrvFs ) souborový systém – není na souborovém systému Linuxu (VolFs ) - abyste zdědili správný Windows pracovní adresář.

cbwin alternativní

Dokud nezískáte nejnovější sestavení, projekt cbwin nabízí řešení instalací 3 nových linuxových příkazů uvnitř WSL:

  • wcmd :volání spustitelného souboru win přes cmd.exe .
  • wrun :volání spustitelného souboru win synchronně s CreateProcess , a počkejte na smrt (bez použití cmd.exe ).
  • wstart :spustí oddělený (asynchronně) příkaz (s použitím cmd.exe ).

Abyste je mohli používat, musíte:

  1. Nainstalujte cbwin :
    • nové outbash.exe se nainstaluje do vašeho běžného souborového systému Windows (někde ve vašem %PATH% ), plus
    • 3 linuxové příkazy v souborovém systému WSL.
  2. Použijte toto outbash.exe (kdekoli jste jej nainstalovali) ke spuštění WSL, NE C:\Windows\System32\bash.exe !
  3. Všem spustitelným souborům typu win předponujte některým z těchto příkazů, např. wrun notepad .

Tip: Pokud se spustitelný soubor spustil s wcmd nebo wrun plodí nějaké děti, ty přežijí jen tak dlouho, dokud ten spustitelný soubor zůstane naživu.

Jinými slovy, pokusit se spustit notepad.exe s wcmd nebude fungovat, protože poznámkový blok bude zabit hned po spuštění -- Použijte wrun (synchronně) nebo wstart (asynchronně) v tomto případě.


Linux
  1. Jak spustit soubory .exe v Ubuntu?

  2. (C/C++) Jak vygenerovat spustitelný soubor, který lze spustit na Windows i Linuxu?

  3. Jak mohu nastavit a spustit PhantomJS na Ubuntu?

  1. Jak mohu spustit funkci ze skriptu v příkazovém řádku?

  2. Jak mohu získat jedinečné hodnoty z pole v Bash?

  3. Otevření Sublime Text z Bash na Ubuntu ve Windows

  1. Jak spouštět aplikace Windows na počítači Ubuntu

  2. Jak nastavit Bash, aby spouštěl *.exe s Mono?

  3. Jak mohu bezpečně spustit nedůvěryhodný spustitelný soubor na linuxu?