เนื่องจาก ps4080
คำตอบของกล่าวถึงวิธีที่ถูกต้องในการทำเช่นนี้คือ wsl -e -- <คำสั่ง>
(หรือโดยทั่วไป wsl -e <คำสั่ง>
).
อย่างไรก็ตาม จริงๆ แล้วมีความแตกต่างบางประการที่คุณอาจพบเจอกับเทคนิคนี้ และเป็นเรื่องดีที่จะเข้าใจว่าเกิดอะไรขึ้นกับคาถาแต่ละบท ดังนั้นคุณจึงสามารถใช้คาถาที่ถูกต้องได้เมื่อจำเป็น:
wsl <คำสั่ง>
- เรียกใช้เชลล์เริ่มต้นสำหรับผู้ใช้ปัจจุบัน
- ... เป็นเชลล์ที่ไม่ได้เข้าสู่ระบบและไม่มีการโต้ตอบ
- ... ในไดเร็กทอรีที่ส่งผ่านโดยกระบวนการ Windows ที่เป็นเจ้าของ
- วิ่ง
<command>
ในเปลือกหอยนั้น
คุณสามารถดูสิ่งนี้ได้ด้วยทั้งนี้ขึ้นอยู่กับเปลือกของคุณ wsl ps -eH
:
PID TTY เวลา CMD
1 ? 00:00:00 น
18 ? 00:00:00 น
19 ? 00:00:00 น
20 แต้ม/0 00:00:00 ปลา
28 แต้ม/0 00:00:00 น
โปรดทราบว่าเป็นเรื่องยากที่จะเห็นสิ่งนี้เมื่อ ทุบตี
เป็นเชลล์เริ่มต้นของคุณตั้งแต่ -ค
ส่งผลโดยปริยาย ผู้บริหาร
.
ความจริงที่ว่าสิ่งนี้ทำงานในไดเร็กทอรีของกระบวนการ Windows ที่เป็นเจ้าของนั้นมีประโยชน์ เนื่องจากคุณสามารถทำได้:
wsl ls -lh
... ใน PowerShell เพื่อรับขนาดไฟล์ที่ "มนุษย์อ่านได้" ซึ่งก็คือ ทำได้ยากอย่างน่าประหลาดใจ มิฉะนั้น.
ส่วนที่ยากที่สุดของสิ่งนี้คือรอบคัดเลือกที่สอง WSL เรียกใช้เชลล์ของคุณเป็นเชลล์ที่ไม่ได้เข้าสู่ระบบและไม่ใช่การโต้ตอบเมื่อเริ่มต้นด้วยวิธีนี้ นี่หมายความว่า ~/.bashrc
และ ~/.bash_profile
เป็น ไม่ ที่มาเมื่อเริ่มต้น ซึ่งอาจทำให้เกิดความสับสนเมื่อพยายามเรียกใช้คำสั่งที่ต้องดำเนินการบางอย่างในไฟล์เริ่มต้น (เช่น การตั้งค่าตัวแปรสภาพแวดล้อม)
wsl -e <คำสั่ง>
- วิ่ง
<command>
เช่น เปลือก
- ... ในไดเร็กทอรีที่ส่งผ่านโดยกระบวนการเป็นเจ้าของ
เดอะ -e
บายพาสเชลล์เริ่มต้นของคุณทั้งหมด
> wsl ps -eH
PID TTY เวลา CMD
1 ? 00:00:00 น
7 ? 00:00:00 น
8 ? 00:00:00 น
9 แต้ม/0 00:00:00 น
นี้สามารถ เล็กน้อย มีประสิทธิภาพมากขึ้นเนื่องจากคุณหลีกเลี่ยงค่าใช้จ่ายในการเริ่มต้นของเชลล์ แต่โดยทั่วไปแล้วก็ไม่คุ้มที่จะกังวล
wsl -e bash -lic <คำสั่ง>
- วิ่ง
ทุบตี
เป็นเชลล์ของคุณ (ไม่ว่าจะเป็นเชลล์เริ่มต้นหรือไม่ก็ตาม)
- บังคับให้เป็นการเข้าสู่ระบบ, เชลล์แบบโต้ตอบ (
-ลิ
) ดังนั้น ~/.bashrc
และ ~/.bash_profile
(และ/หรืออื่นๆ) มีที่มา
- ... ในไดเร็กทอรีที่ส่งผ่านโดยกระบวนการ Windows ที่เป็นเจ้าของ
- วิ่ง
<command>
ในเปลือกหอยนั้น
นี่เป็นเวอร์ชันที่จะใช้หากคำสั่งต้องการอะไรจากการกำหนดค่าเริ่มต้นของคุณ