La fel de ps4080
Ră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.