11Sep

Windows-programma's uitvoeren vanuit de Bash Shell van Windows 10

In de Creators Update kunt u met de Bash-shell van Windows 10 nu Windows binaire bestanden en standaard Command Prompt-opdrachten uitvoeren, rechtstreeks vanuit Bash. Je kunt zowel Linux- als Windows-programma's uitvoeren vanuit dezelfde Bash-shell, of zelfs Windows-opdrachten opnemen in een Bash-script.

Wat u moet weten

Hier zijn enkele basisgegevens die u moet weten over deze functie:

  • Gebruikersaccount : Programma's die vanuit de Bash-shell worden gestart, worden uitgevoerd alsof ze door het huidige Windows-gebruikersaccount zijn gestart.
  • -rechten : deze programma's hebben dezelfde rechten als het Bash.exe-proces. Dus als u wilt dat deze opdrachten beheerdersrechten hebben, moet u de Bash-shell uitvoeren als beheerder.
  • Working Directory : Windows-programma's delen dezelfde "werkdirectory" als de Bash-shell. Als u dus een opdracht uitvoert met de inhoud van de huidige map, wordt de inhoud van de huidige werkdirectory in de Bash-shell weergegeven. Gebruik de opdracht cd om werkmappen te wijzigen.

Laten we met dat in gedachten eens kijken hoe een programma moet worden uitgevoerd.

Een Windows-programma uitvoeren

Om een ​​Windows-programma uit te voeren, voert u het pad naar het. exe-bestand van het programma in de Bash-shell in. Vergeet niet dat uw Windows C: -station beschikbaar is op /mnt/ c in Bash. De Bash-omgeving is ook hoofdlettergevoelig, dus u moet het juiste hoofdlettergebruik opgeven.

Stel dat u het Ping-hulpprogramma wilt starten dat zich bevindt op C: \ Windows \ System32 \ PING.EXE.U voert de volgende opdracht uit:

/mnt/c/Windows/System32/ PING.EXE

De volgende opdracht zou niet werken, omdat Bash hoofdlettergevoelig is:

/mnt/c/windows/system32/ ping.exe

Dit is een beetje ingewikkelder als het pad complexe tekens bevat zoals spaties en haken,zoals de map Program Files. Je moet "ontsnappen" aan spaties, haakjes en andere complexe tekens door ze vooraf te plaatsen met een "\" teken.

Stel dat u bijvoorbeeld het Internet Explorer-programma wilt uitvoeren dat zich bevindt in C: \ Program Files( x86) \ Internet Explorer \ iexplore.exe. U zou de volgende opdracht moeten uitvoeren in Bash:

/mnt/c/ Programma \ Bestanden \ \( x86 \) / Internet \ Explorer / iexplore.exe

Let op de "\" voor de spatie en haakjes. Deze karakters moeten "ontsnapt" zijn of Bash zal zich niet realiseren dat de karakters deel uitmaken van een bestandspad.

Een argument doorgeven aan een opdracht

De Bash-shell geeft argumenten rechtstreeks door aan de opdrachten die u uitvoert.

Als u bijvoorbeeld example.com wilt pingen, voert u het volgende uit:

/mnt/c/Windows/System32/ PING.EXE example.com

Of, als u het Windows-hosts-bestand in Kladblok wilt openen, voert u het volgende uit:

/mnt/c/Windows/System32/ notepad.exe "C: \ Windows \ System32 \ drivers \ etc \ hosts "

U gebruikt het standaard Windows-bestandspad wanneer u een bestandspad rechtstreeks naar een Windows-programma doorgeeft. Dat komt omdat Bash het argument rechtstreeks doorgeeft. Notepad.exe en andere Windows-programma's verwachten een Windows-bestandspad.

Een ingebouwd commando uitvoeren

Sommige Windows-opdrachten zijn geen. exe-bestanden, maar zijn ingebouwd in de opdrachtprompt zelf. Dit omvat bijvoorbeeld de opdracht dir die u normaal gesproken kunt uitvoeren in een opdrachtprompt. Als u zo'n opdracht wilt uitvoeren, moet u het cmd.exe-binaire bestand dat aan de opdrachtprompt is gekoppeld, uitvoeren en het als argument doorgeven met / C, zoals het volgende:

/mnt/c/Windows/System32/ cmd.exe / C-opdracht

Bijvoorbeeld om de dir te startencommando ingebouwd in de opdrachtprompt, voert u de volgende opdracht uit:

/mnt/c/Windows/System32/ cmd.exe / C dir

Hoe u mappen aan het pad toevoegt

De Windows Services voor Linux-omgeving behandelt Windows-uitvoerbare bestanden vergelijkbaar met de manier waarop het Linux-binaries behandelt. Dit betekent dat u een map met. exe-bestanden aan het pad kunt toevoegen en die. exe-bestanden dan rechtstreeks kunt uitvoeren. Als u bijvoorbeeld de map System32 aan uw pad wilt toevoegen, voert u het volgende uit:

-export PATH = $ PATH: /mnt/c/Windows/ System32

U kunt dan Windows. exe-bestanden in de map System32 rechtstreeks uitvoeren, zoals bijvoorbeeld: Voorbeeld

PING.exe.com notepad.exe cmd.exe / C dir

Hoe de uitvoer van de ene opdracht naar de andere wordt geleid

De uitvoer van een Windows-opdracht kan worden doorgesluisd naar een Linux-opdracht en omgekeerd. U kunt bijvoorbeeld de opdracht ipconfig.exe -all gebruiken om details over uw netwerkinterfaces weer te geven en deze naar de opdracht Linux grep door te sturen om de uitvoer te zoeken. Als u bijvoorbeeld alle informatie over uw verbinding wilt weergeven en wilt zoeken naar secties die overeenkomen met "IPv4-adres", voert u het volgende uit:

/mnt/c/Windows/System32/ ipconfig.exe -all |grep "IPv4-adres"

Dat is het basisproces. Deze commando's zullen ook werken wanneer ze zijn opgenomen in een Bash-script, zodat je een Bash-script kunt schrijven dat zowel Windows-opdrachten als Linux-hulpprogramma's bevat. Als het in de Bash-shell draait, werkt het in een Bash-script.

En als u de andere kant op wilt, kunt u de opdracht bash -c gebruiken om Bash-opdrachten uit te voeren vanaf de standaard Windows-opdrachtprompt.

-GERELATEERDE ARTIKELEN
Bash-shell-scripts maken en uitvoeren op Windows 10
Linux-opdrachten van buiten de basishuls uitvoeren op Windows 10