Pagina principala » HOWTO » Cum se execută programele Windows din Windows Bash Shell

    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.