GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann ich eine ausführbare Windows-Datei von WSL (Ubuntu) Bash ausführen

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 über cmd.exe auf .
  • wrun :Aufruf einer ausführbaren Win-Datei synchron mit CreateProcess , und warte auf den Tod (nicht mit cmd.exe ).
  • wstart :Starten Sie einen getrennten (asynchronen) Befehl (unter Verwendung von cmd.exe ).

Um sie zu verwenden, müssen Sie:

  1. 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.
  2. Verwenden Sie diesen outbash.exe (wo immer Sie es installiert haben), um WSL zu starten, NICHT C:\Windows\System32\bash.exe !
  3. 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.


Linux
  1. So führen Sie Windows-Apps auf Ihrem Ubuntu-PC aus

  2. Wie führe ich .exe-Dateien in Ubuntu aus?

  3. Wie führe ich Ubuntu unter Windows 10 auf VirtualBox aus?

  4. Wie kann ich eine auf einem Linux-Rechner installierte OpenGL-Anwendung von meinem Windows-Rechner aus ausführen?

  5. Wie können Sie Duplikate aus dem Bash-Verlauf entfernen?

So führen Sie Windows 95 unter Linux aus

So führen Sie Linux-Apps unter Windows 10 und 11 mit WSL aus

So installieren Sie Wine, um Windows-Anwendungen in Ubuntu auszuführen

So teilen Sie einen Ordner auf Ubuntu für den Zugriff von Windows 10

So führen Sie ein Bash-Skript aus

Wenn ich kann, wie installiere ich Ubuntu von Ubuntu?