Im Windows 10 Creators Update (Build 1703, April 2017) wird dies nativ unterstützt. Sie können also Windows-Binärdateien jetzt von Linux aus ausführen ...
notepad.exe
oder jeder andere .exe
(Die Erweiterung wird benötigt und muss sich auf Ihrem Pfad befinden, einige ältere Versionen benötigen den vollständigen Pfad)
...und umgekehrt mit einem der folgenden:
bash.exe -c command_to_run
also:bash.exe -c ls
bash -c command_to_run
B.:bash -c ls
wsl command_to_run
also:wsl "ls"
; oder spezifizieren Sie die Distribution, die Sie zum Ausführen verwenden möchten, mit:ubuntu run ls
Weitere Informationen finden Sie im oben verlinkten Artikel.
warum nicht einfach verwenden
$ powershell.exe Start filename
Start
ist das Windows-Äquivalent zu xdg-open
auf den meisten Linux oder open
unter macOS, was "mit Standard-Desktop-Anwendung öffnen" bedeutet. Ich verwende gerne einen Alias, um es zu öffnen.
Native Lösung
Die offizielle Lösung, die mit Windows 10 Insider Preview Update bereitgestellt wird (14951) basiert auf dem fast vergessenen binfmt_msc Linux-Einrichtung zum Starten von Binärdateien. Der Registrierungsbefehl für binfmt_misc wäre so (wobei /init
ist das vorläufige binfmt_misc "Interpreter" für die Win-Executables):
sudo echo ":WSLInterop:M::MZ::/init:" > /proc/sys/fs/binfmt_misc/register
Und dann würde Win-Executable wie normale Programme gestartet:
$ 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
Nicht, dass irgendeine ausführbare Win-Datei in den Windows-Dateien (DrvFs ) Dateisystem - nicht auf dem Dateisystem von Linux (VolFs ) - um ein richtiges Windows zu erben Arbeitsverzeichnis.
Der cbwin Alternative
Bis Sie den neuesten Build erhalten, bietet das Projekt cbwin eine Problemumgehung, indem es 3 neue Linux-Befehle in WSL installiert:
wcmd
:Rufen Sie eine ausführbare Win-Datei übercmd.exe
auf .wrun
:Aufruf einer ausführbaren Win-Datei synchron mitCreateProcess
, und warte auf den Tod (nicht mitcmd.exe
).wstart
:Starten Sie einen getrennten (asynchronen) Befehl (unter Verwendung voncmd.exe
).
Um sie zu verwenden, müssen Sie:
- Installieren Sie cbwin :
- ein neuer
outbash.exe
wird in Ihrem regulären Windows-Dateisystem installiert (irgendwo in Ihrem%PATH%
), plus - die 3 Linux-Befehle im WSL-Dateisystem.
- ein neuer
- Verwenden Sie diesen
outbash.exe
(wo immer Sie es installiert haben), um WSL zu starten, NICHTC:\Windows\System32\bash.exe
! - Stellen Sie allen ausführbaren Win-Dateien einen dieser Befehle voran, z.
wrun notepad
.
Tipp: Wenn die ausführbare Datei mit wcmd
gestartet wurde oder wrun
irgendwelche Kinder spawnt, überleben diese nur so lange, wie die ausführbare Datei am Leben bleibt.
Mit anderen Worten, der Versuch, notepad.exe
zu starten mit wcmd
funktioniert nicht, weil notepad wird direkt nach dem Start beendet -- Verwenden Sie wrun
(synchron) oder wstart
(asynchron) in diesem Fall.