11Sep
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.EXEDe volgende opdracht zou niet werken, omdat Bash hoofdlettergevoelig is:
/mnt/c/windows/system32/ ping.exeDit 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.exeLet 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.comOf, 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-opdrachtBijvoorbeeld om de dir te startencommando ingebouwd in de opdrachtprompt, voert u de volgende opdracht uit:
/mnt/c/Windows/System32/ cmd.exe / C dirHoe 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/ System32U kunt dan Windows. exe-bestanden in de map System32 rechtstreeks uitvoeren, zoals bijvoorbeeld: Voorbeeld
PING.exe.com notepad.exe cmd.exe / C dirHoe 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.