เนื่องจาก 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> ในเปลือกหอยนั้น
นี่เป็นเวอร์ชันที่จะใช้หากคำสั่งต้องการอะไรจากการกำหนดค่าเริ่มต้นของคุณ