Như ps4080
câu trả lời của đề cập, cách đúng đắn để làm điều này là wsl -e -- <lệnh>
(hoặc, thông thường wsl -e <lệnh>
).
Tuy nhiên, thực tế có khá nhiều sắc thái mà bạn có thể gặp phải với kỹ thuật này và thật tuyệt khi hiểu điều gì đang xảy ra với mỗi câu thần chú chính xác để bạn có thể sử dụng đúng khi cần:
wsl <lệnh>
- Chạy shell mặc định cho người dùng hiện tại
- ... dưới dạng trình bao không đăng nhập, không tương tác
- ... trong thư mục được chuyển vào bởi tiến trình Windows sở hữu
- chạy
<command>
trong vỏ đó
Tùy thuộc vào vỏ của bạn, bạn có thể thấy điều này với wsl ps -eH
:
PID TTY THỜI GIAN CMD
1 ? 00:00:00 bắt đầu
18? 00:00:00 bắt đầu
19? 00:00:00 bắt đầu
20 điểm/0 00:00:00 cá
28 điểm/0 00:00:00 ps
Lưu ý rằng rất khó để thấy điều này khi đánh đập
là vỏ mặc định của bạn kể từ -c
kết quả trong một ẩn giám đốc điều hành
.
Thực tế là điều này chạy trong thư mục của tiến trình Windows sở hữu có thể hữu ích, vì bạn có thể làm:
wsl ls -lh
... trong PowerShell để nhận kích thước tệp "con người có thể đọc được", thứ gì đó khó làm một cách đáng ngạc nhiên nếu không thì.
Phần khó nhất của việc này là vòng loại thứ hai. WSL chạy trình bao của bạn dưới dạng trình bao không đăng nhập, không tương tác khi bắt đầu theo cách này. Điều này có nghĩa rằng ~/.bashrc
và ~/.bash_profile
là không phải có nguồn gốc khi khởi động. Điều này có thể gây ra sự nhầm lẫn khi cố gắng chạy một lệnh yêu cầu phải thực hiện điều gì đó trong tệp khởi động (ví dụ: đặt biến môi trường).
wsl -e <lệnh>
- chạy
<command>
như cái vỏ
- ... trong thư mục được chuyển vào bởi quá trình sở hữu
Các -e
hoàn toàn bỏ qua trình bao mặc định của bạn.
> wsl ps -eH
PID TTY THỜI GIAN CMD
1 ? 00:00:00 bắt đầu
7? 00:00:00 bắt đầu
số 8 ? 00:00:00 bắt đầu
9 điểm/0 00:00:00 điểm
Điều này có thể là khinh bỉ hiệu quả hơn vì bạn tránh được chi phí khởi động của trình bao, nhưng điều đó thường không đáng lo ngại.
wsl -e bash -lic <lệnh>
- chạy
đánh đập
làm trình bao của bạn (bất kể đó có phải là trình bao mặc định hay không)
- Buộc nó phải là một trình bao tương tác, đăng nhập (
-li
) để có thể ~/.bashrc
và ~/.bash_profile
(và/hoặc những người khác) có nguồn gốc
- ... trong thư mục được chuyển vào bởi tiến trình Windows sở hữu
- chạy
<command>
trong vỏ đó
Đây là phiên bản để sử dụng nếu lệnh cần bất kỳ thứ gì từ cấu hình khởi động của bạn.