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 opdrachtpromptopdrachten 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 je moet weten
Hier zijn enkele basisgegevens die u moet weten over deze functie:
- Gebruikers account: Programma's die vanuit de Bash-shell worden gestart, worden uitgevoerd alsof ze door het huidige Windows-gebruikersaccount zijn gestart.
- machtigingen: Deze programma's hebben dezelfde rechten als het proces Bash.exe. Dus, als u wilt dat deze commando's beheerdersrechten hebben, moet u de Bash-shell uitvoeren als beheerder.
- Werkmap: Windows-programma's delen dezelfde "werkdirectory" als de Bash-shell. Dus als u een opdracht uitvoert die de inhoud van de huidige map vermeldt, wordt de inhoud van de huidige werkdirectory in de Bash-shell weergegeven. Gebruik de
CD
opdracht om werkmappen te wijzigen.
Laten we met dat in gedachten eens kijken hoe een programma moet worden uitgevoerd.
Hoe een Windows-programma uit te voeren
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 je Windows C: -drive beschikbaar is in / mnt / c in Bash. De Bash-omgeving is ook hoofdlettergevoelig, dus u moet het juiste hoofdlettergebruik opgeven.
Stel dat u het hulpprogramma Ping op C: \ Windows \ System32 \ PING.EXE wilt starten. U voert de volgende opdracht uit:
/mnt/c/Windows/System32/PING.EXE
Het volgende commando 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. In Bash zou je de volgende opdracht moeten uitvoeren:
/ mnt / c / Program \ Files \ \ (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 commando
De Bash-shell geeft argumenten rechtstreeks door aan de opdrachten die u uitvoert.
Als u bijvoorbeeld example.com wilt pingelen, voert u het volgende uit:
/mnt/c/Windows/System32/PING.EXE example.com
Of, als u het Windows-hosts-bestand in Kladblok wilde openen, zou u het volgende uitvoeren:
/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.
Hoe een ingebouwd commando uit te voeren
Sommige Windows-opdrachten zijn geen .exe-bestanden, maar zijn ingebouwd in de opdrachtprompt zelf. Dit omvat bijvoorbeeld de dir
commando dat je normaal zou kunnen uitvoeren in een opdrachtprompt. Om een dergelijke opdracht uit te voeren, moet u de cmd.exe
binary geassocieerd met de opdrachtprompt en geef het commando door als argument met / C, zoals zo:
/mnt/c/Windows/System32/cmd.exe / C-opdracht
Bijvoorbeeld om de dir
opdracht ingebouwd in de opdrachtprompt, voert u de volgende opdracht uit:
/mnt/c/Windows/System32/cmd.exe / C dir
Hoe mappen aan het pad toe te voegen
De Windows Services voor Linux-omgeving behandelt Windows-uitvoerbare bestanden vergelijkbaar met de manier waarop Linux-binaries worden behandeld. 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:
PATH exporteren = $ PATH: / mnt / c / Windows / System32
Vervolgens kunt u Windows .exe-bestanden in de map System32 rechtstreeks uitvoeren, zoals:
PING.exe example.com
notepad.exe
cmd.exe / C richt
Hoe de output van het ene commando naar het andere te pipen
De uitvoer van een Windows-opdracht kan worden doorgesluisd naar een Linux-opdracht en omgekeerd. U kunt bijvoorbeeld de ipconfig.exe -all
commando om details over je netwerkinterfaces op te nemen en naar Linux te pipen grep
opdracht 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, dus je kunt een Bash-script 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 Command Prompt.