Cum se execută programele Windows din Windows Bash Shell
În actualizarea creatorilor, shell-ul Bash Windows 10 vă permite acum să executați binare Windows și comenzi standard Command Prompt, direct de la Bash. Puteți rula atât programele Linux, cât și programele Windows din aceeași coajă Bash sau chiar să încorporați comenzile Windows într-un script Bash.
Ce trebuie sa stii
Iată câteva detalii de bază despre această caracteristică:
- Contul utilizatorului: Programele lansate din shell-ul Bash se vor executa ca și cum ar fi lansate de contul curent de utilizator Windows.
- Permisiuni: Aceste programe vor avea aceleași permisiuni ca și procesul Bash.exe. Deci, dacă doriți ca aceste comenzi să aibă acces la Administrator, va trebui să rulați shell-ul Bash ca Administrator.
- Director de lucru: Programele Windows partajează același "director de lucru" ca shell-ul Bash. Deci, dacă executați o comandă care listează conținutul directorului curent, acesta va afișa conținutul directorului de lucru curent din shell-ul Bash. Folosește
CD
comanda pentru a schimba directoarele de lucru.
Având în vedere acest lucru, să aruncăm o privire la modul de rulare a unui program.
Cum se execută un program Windows
Pentru a rula un program Windows, introduceți calea fișierului .exe al programului în shell-ul Bash. Rețineți că unitatea Windows C: este disponibilă la / mnt / c în Bash. Mediul Bash este, de asemenea, sensibil la minuscule, deci trebuie să specificați capitalizarea corectă.
Să presupunem că ați vrut să lansați utilitarul Ping situat la C: \ Windows \ System32 \ PING.EXE. Ați rula următoarea comandă:
/mnt/c/Windows/System32/PING.EXE
Următoarea comandă nu ar funcționa, deoarece Bash este sensibil la minuscule:
/mnt/c/windows/system32/ping.exe
Este un pic mai complicat dacă calea conține caractere complexe precum spații și paranteze, cum ar fi dosarele Program Files. Trebuie să "scăpați" spațiile, parantezele și alte caractere complexe, prefixându-le cu un caracter "\".
De exemplu, să presupunem că doriți să rulați programul Internet Explorer situat la C: \ Program Files (x86) \ Internet Explorer \ iexplore.exe. Va trebui să executați următoarea comandă în Bash:
/ mnt / c / Program \ Files \ \ x86 \ / Internet \ Explorer / iexplore.exe
Rețineți "\" înainte de caracterele spațiului și coloanei. Aceste caractere trebuie să fie "scapate" sau Bash nu va realiza că caracterele fac parte dintr-o cale de fișier.
Cum să treci un argument într-o comandă
Bash shell-ul transmite argumentele direct comenzilor pe care le executați.
De exemplu, dacă doriți să executați ping example.com, ați rula:
/mnt/c/Windows/System32/PING.EXE example.com
Sau, dacă doriți să deschideți fișierul gazdă Windows în Notepad, ați rula:
/mnt/c/Windows/System32/notepad.exe "C: \ Windows \ System32 \ drivere \ etc \ hosts"
Utilizați calea standard a fișierului Windows atunci când transmiteți o cale de fișier direct unui program Windows. Asta pentru că Bash transmite argumentul în mod direct. Notepad.exe și alte programe Windows se așteaptă la o cale de fișiere Windows.
Cum să executați o comandă încorporată
Unele comenzi Windows nu sunt fișiere .exe, ci sunt încorporate în Command Prompt. De exemplu, aceasta include dir
puteți executa în mod normal într-o comandă. Pentru a rula o astfel de comandă, trebuie să rulați cmd.exe
binar asociat cu Promptul de comandă și să îi transmiteți comanda ca argument cu / C, după cum urmează:
/mnt/c/Windows/System32/cmd.exe / comanda C
De exemplu, pentru a rula dir
comandă încorporată în Promptul de comandă, ați rula următoarea comandă:
/mnt/c/Windows/System32/cmd.exe / C dir
Cum se adaugă directoare la cale
Mediul Windows Services for Linux tratează executabilul Windows similar cu modul în care tratează binarele Linux. Aceasta înseamnă că puteți adăuga un director care conține fișiere .exe pe cale și apoi executați acele fișiere .exe direct. De exemplu, pentru a adăuga directorul System32 la calea ta, ai rula:
exportul PATH = $ PATH: / mnt / c / Windows / System32
Apoi, puteți rula direct fișierele .exe Windows situate în folderul System32, cum ar fi:
PING.exe example.com
notepad.exe
cmd.exe / C dir
Cum să conduci ieșirea unei comenzi la alta
Ieșirea unei comenzi Windows poate fi transmisă unei comenzi Linux și invers. De exemplu, puteți utiliza funcția ipconfig.exe -all
comanda pentru a lista detaliile despre interfețele de rețea și pentru ao conduce la Linux grep
comanda pentru a căuta ieșirea. De exemplu, pentru a afișa toate informațiile despre conexiunea dvs. și pentru a căuta secțiuni care se potrivesc "Adresa IPv4", ați rula:
/mnt/c/Windows/System32/ipconfig.exe -all | grep "Adresă IPv4"
Acesta este procesul de bază. Aceste comenzi vor funcționa și atunci când sunt încorporate într-un script Bash, astfel încât puteți scrie un script Bash care încorporează atât comenzi Windows, cât și utilitare Linux. Dacă rulează în shell-ul Bash, va funcționa într-un script Bash.
Și dacă doriți să mergeți în altă direcție, puteți folosi comanda "bash -c" pentru a rula comenzile Bash din linia de comandă standard Windows.