La fel de ps4080Răspunsul lui menționează, modul corect de a face acest lucru este wsl -e -- <comandă> (sau, de obicei wsl -e <comanda>).
Cu toate acestea, există de fapt câteva nuanțe pe care le puteți întâlni cu această tehnică și este plăcut să înțelegeți ce se întâmplă cu fiecare incantație exactă, astfel încât să o puteți folosi pe cea potrivită atunci când este necesar:
wsl <comanda>
- Rulează shell-ul implicit pentru utilizatorul curent
- ... ca un shell non-login, non-interactiv
- ... în directorul transmis de procesul deținător Windows
- Aleargă
<command> în acea cochilie
În funcție de carcasa ta, poți vedea asta cu wsl ps -eH:
PID TTY TIME CMD
1 ? 00:00:00 init
18 ? 00:00:00 init
19 ? 00:00:00 init
20 puncte/0 00:00:00 pește
28 puncte/0 00:00:00 ps
Rețineți că este dificil să vedeți asta când bash este shell-ul tău implicit de atunci -c rezultă într-un implicit exec.
Faptul că acesta rulează în directorul procesului Windows care deține poate fi util, deoarece puteți face:
wsl ls -lh
... în PowerShell pentru a obține dimensiuni de fișiere „lizibile de om”, ceva care este surprinzător de greu de făcut in caz contrar.
Cea mai dificilă parte a acestui lucru este al doilea calificativ. WSL rulează shell-ul dvs. ca un shell non-login, non-interactiv atunci când este pornit în acest fel. Aceasta înseamnă că ~/.bashrc și ~/.bash_profile sunt nu provenit la pornire. Acest lucru poate provoca confuzie atunci când încercați să rulați o comandă care necesită ceva de făcut în fișierele de pornire (de exemplu, setarea unei variabile de mediu).
wsl -e <comanda>
- Aleargă
<command> la fel de cochilia
- ... în directorul transmis prin procesul de deținere
The -e ocolește complet shell-ul implicit.
> wsl ps -eH
PID TTY TIME CMD
1 ? 00:00:00 init
7 ? 00:00:00 init
8 ? 00:00:00 init
9 puncte/0 00:00:00 ps
Acesta poate fi puțin mai eficient, deoarece evitați supraîncărcarea de pornire a shell-ului, dar de obicei nu merită să vă faceți griji.
wsl -e bash -lic <comanda>
- Aleargă
bash ca shell-ul tău (indiferent dacă este shell-ul implicit sau nu)
- Forțează să fie un shell interactiv de conectare (
-li) astfel încât ~/.bashrc și ~/.bash_profile (și/sau altele) sunt obținute
- ... în directorul transmis de procesul deținător Windows
- Aleargă
<command> în acea cochilie
Aceasta este versiunea de utilizat dacă comanda are nevoie de ceva din configurația de pornire.