Ausführen von Windows-Programmen über die Bash-Shell von Windows 10
Im Creators Update können Sie mit der Bash-Shell von Windows 10 jetzt Windows-Binärdateien und standardmäßige Befehlszeilenbefehle direkt von Bash aus ausführen. Sie können sowohl Linux- als auch Windows-Programme von derselben Bash-Shell aus ausführen oder sogar Windows-Befehle in ein Bash-Skript integrieren.
Was du wissen musst
Hier sind einige grundlegende Details, die Sie über diese Funktion wissen müssen:
- Benutzerkonto: Programme, die von der Bash-Shell aus gestartet werden, werden so ausgeführt, als würden sie vom aktuellen Windows-Benutzerkonto gestartet.
- BerechtigungenDiese Programme verfügen über die gleichen Berechtigungen wie der Prozess Bash.exe. Wenn Sie möchten, dass diese Befehle über Administratorzugriff verfügen, müssen Sie die Bash-Shell als Administrator ausführen.
- Arbeitsverzeichnis: Windows-Programme verwenden dasselbe Arbeitsverzeichnis wie die Bash-Shell. Wenn Sie also einen Befehl ausführen, der den Inhalt des aktuellen Verzeichnisses auflistet, wird der Inhalt des aktuellen Arbeitsverzeichnisses in der Bash-Shell angezeigt. Verwenden Sie die
CD
Befehl zum Ändern von Arbeitsverzeichnissen.
Lassen Sie uns aus diesem Grund einen Blick auf die Ausführung eines Programms werfen.
So führen Sie ein Windows-Programm aus
Geben Sie zum Ausführen eines Windows-Programms den Pfad zur EXE-Datei des Programms in der Bash-Shell ein. Denken Sie daran, dass Ihr Windows-Laufwerk C: unter / mnt / c in Bash verfügbar ist. In der Bash-Umgebung wird auch zwischen Groß- und Kleinschreibung unterschieden. Daher müssen Sie die korrekte Großschreibung angeben.
Angenommen, Sie wollten das Ping-Dienstprogramm unter C: \ Windows \ System32 \ PING.EXE starten. Sie würden den folgenden Befehl ausführen:
/mnt/c/Windows/System32/PING.EXE
Der folgende Befehl würde nicht funktionieren, weil Bash die Groß- und Kleinschreibung berücksichtigt:
/mnt/c/windows/system32/ping.exe
Dies ist etwas komplizierter, wenn der Pfad komplexe Zeichen wie Leerzeichen und Klammern wie die Ordner "Programme" enthält. Leerzeichen, Klammern und andere komplexe Zeichen müssen durch ein vorangestelltes "\" -Zeichen "entkommen".
Angenommen, Sie wollten das Internet Explorer-Programm ausführen, das sich unter C: \ Programme (x86) \ Internet Explorer \ iexplore.exe befindet. Sie müssen den folgenden Befehl in Bash ausführen:
/ mnt / c / Programme \ Dateien \ \ (x86 \) / Internet \ Explorer / iexplore.exe
Beachten Sie das "\" vor dem Leerzeichen und den Klammern. Diese Zeichen müssen "Escape-Zeichen" sein, da Bash nicht erkennt, dass die Zeichen Teil eines Dateipfads sind.
So übergeben Sie ein Argument an einen Befehl
Die Bash-Shell übergibt Argumente direkt an die Befehle, die Sie ausführen.
Wenn Sie beispielsweise ping example.com ausführen möchten, würden Sie Folgendes ausführen:
/mnt/c/Windows/System32/PING.EXE example.com
Wenn Sie die Windows-Hosts-Datei in Notepad öffnen möchten, führen Sie Folgendes aus:
/mnt/c/Windows/System32/notepad.exe "C: \ Windows \ System32 \ drivers \ etc \ hosts"
Sie verwenden den Standard-Windows-Dateipfad, wenn Sie einen Dateipfad direkt an ein Windows-Programm übergeben. Das liegt daran, dass Bash das Argument direkt weiterleitet. Notepad.exe und andere Windows-Programme erwarten einen Windows-Dateipfad.
So führen Sie einen integrierten Befehl aus
Einige Windows-Befehle sind keine EXE-Dateien, sondern in die Eingabeaufforderung selbst integriert. Dies beinhaltet beispielsweise die dir
Befehl, den Sie normalerweise in einer Eingabeaufforderung ausführen. Um einen solchen Befehl auszuführen, müssen Sie das ausführen cmd.exe
binär mit der Eingabeaufforderung verknüpft und übergeben Sie den Befehl als Argument mit / C, wie folgt:
/mnt/c/Windows/System32/cmd.exe / C Befehl
Zum Beispiel, um das auszuführen dir
Wenn Sie einen in die Eingabeaufforderung integrierten Befehl ausführen, führen Sie den folgenden Befehl aus:
/mnt/c/Windows/System32/cmd.exe / c dir
So fügen Sie dem Pfad Verzeichnisse hinzu
In der Windows Services for Linux-Umgebung werden ausführbare Dateien von Windows behandelt, ähnlich wie Linux-Binärdateien. Das bedeutet, dass Sie dem Pfad ein Verzeichnis hinzufügen können, das EXE-Dateien enthält, und diese EXE-Dateien dann direkt ausführen. Um beispielsweise das Verzeichnis System32 zu Ihrem Pfad hinzuzufügen, würden Sie Folgendes ausführen:
export PATH = $ PATH: / mnt / c / Windows / System32
Sie können dann Windows-EXE-Dateien direkt im Ordner "System32" ausführen:
PING.exe example.com
notepad.exe
cmd.exe / c dir
Wie man die Ausgabe eines Befehls an einen anderen weiterleitet
Die Ausgabe eines Windows-Befehls kann an einen Linux-Befehl und umgekehrt weitergeleitet werden. Zum Beispiel können Sie die ipconfig.exe -all
Befehl, um Details zu Ihren Netzwerkschnittstellen aufzulisten und an Linux weiterzuleiten grep
Befehl zum Durchsuchen der Ausgabe. Um beispielsweise alle Informationen zu Ihrer Verbindung aufzulisten und nach Abschnitten zu suchen, die mit der IPv4-Adresse übereinstimmen, würden Sie Folgendes ausführen:
/mnt/c/Windows/System32/ipconfig.exe -all | grep "IPv4-Adresse"
Das ist der grundlegende Prozess. Diese Befehle funktionieren auch, wenn sie in ein Bash-Skript integriert werden. Sie können also ein Bash-Skript schreiben, das sowohl Windows-Befehle als auch Linux-Dienstprogramme enthält. Wenn es in der Bash-Shell ausgeführt wird, funktioniert es in einem Bash-Skript.
Wenn Sie den anderen Weg wählen möchten, können Sie mit dem Befehl "bash -c" Bash-Befehle an der Standard-Windows-Eingabeaufforderung ausführen.