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

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

In de Creators Update, de Bash-shell van Windows 10kunt u nu Windows-binaries en standaardopdrachtpromptopdrachten 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

VERWANT: Alles wat u kunt doen met de nieuwe Bash Shell van Windows 10

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

  • Gebruikers account: Programma's die worden gestart vanuit de Bash-shell worden uitgevoerd alsof ze zijn gestart door de huidige Windows-gebruikersaccount.
  • Rechten: Deze programma's hebben dezelfde machtigingen als het Bash.exe-proces. Als u dus wilt dat deze opdrachten beheerderstoegang hebben, moet u de Bash-shell uitvoeren als beheerder.
  • Werkmap: Windows-programma's delen hetzelfde 'werkend'map 'als de Bash-shell. Dus als u een opdracht uitvoert die de inhoud van de huidige map weergeeft, wordt de inhoud van de huidige werkmap in de Bash-shell weergegeven. Gebruik de cd opdracht om werkmappen te wijzigen.

Laten we daarom eens kijken hoe we een programma kunnen uitvoeren.

Hoe een Windows-programma uit te voeren

VERWANT: Hoe toegang te krijgen tot uw Ubuntu Bash-bestanden in Windows (en uw Windows-systeemstation in Bash)

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

Stel dat u het hulpprogramma Ping wilt starten op C: WindowsSystem32PING.EXE. U zou de volgende opdracht uitvoeren:

/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 padbevat complexe tekens zoals spaties en haakjes, zoals de programmabestandenmappen. U moet spaties, haakjes en andere complexe tekens "ontsnappen" door ze te laten voorafgaan door een "" -teken.

Stel dat u het programma Internet Explorer wilt uitvoeren dat zich bevindt op C: Program Files (x86) Internet Exploreriexplore.exe. U moet de volgende opdracht uitvoeren in Bash:

/mnt/c/Program Files (x86)/Internet Explorer/iexplore.exe

Let op de "" vóór de spatie en haakjes. Deze tekens moeten 'ontsnapt' zijn, anders realiseert Bash niet dat de tekens 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, zou u:

/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:WindowsSystem32driversetchosts"

U gebruikt het standaard Windows-bestandspad wanneereen bestandspad rechtstreeks doorgeven aan een Windows-programma. Dat komt omdat Bash het argument direct 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 dir opdracht die u normaal gesproken in een opdrachtprompt uitvoert. Om zo'n commando uit te voeren, moet je de cmd.exe binair geassocieerd met de opdrachtprompt en geef het de opdracht als een argument met / C, als volgt:

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

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

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

Hoe directories aan het pad toe te voegen

De Windows Services voor Linux-omgeving behandeltWindows-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 vervolgens die .exe-bestanden 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 vervolgens Windows .exe-bestanden in de map System32 rechtstreeks uitvoeren, als volgt:

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

Hoe de uitvoer van het ene commando naar het andere te leiden

De uitvoer van een Windows-opdracht kan worden doorgestuurd naar een Linux-opdracht en vice versa. U kunt bijvoorbeeld de ipconfig.exe -all commando om details over uw netwerkinterfaces weer te geven en door te verbinden met Linux grep commando om de output te zoeken. Als u bijvoorbeeld alle informatie over uw verbinding wilt weergeven en naar secties wilt zoeken die overeenkomen met 'IPv4-adres', voert u het volgende uit:

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

Dat is het basisproces. Deze opdrachten werken ook wanneer ze in een Bash-script zijn opgenomen, dus u kunt een Bash-script schrijven dat zowel Windows-opdrachten als Linux-hulpprogramma's bevat. Als het in de Bash-shell wordt uitgevoerd, werkt het in een Bash-script.

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