ตัวแปร $ SHLVL ใช้เพื่อบอกจำนวนหอยที่อยู่ลึกลงไป ถ้าคุณสับสนนี้จะมีมูลค่าเริ่มต้นที่จุดเริ่มต้น
Shell คืออะไร?
เปลือกใช้คำสั่งและให้พวกเขาไปยังระบบปฏิบัติการพื้นฐานที่จะดำเนินการ ในระบบลีนุกซ์ส่วนใหญ่โปรแกรมเชลล์เรียกว่า BASH (The Bourne Again Shell) แต่มีผู้ใช้อื่น ๆ เช่น C Shell (tcsh) และ KORN shell (ksh)
วิธีการเข้าถึง Linux Shell
โดยทั่วไปในฐานะผู้ใช้คุณโต้ตอบกับโปรแกรม shell โดยใช้โปรแกรมจำลองเทอร์มินัลเช่น XTerm, konsole หรือ gnome-terminal
ถ้าคุณใช้ตัวจัดการหน้าต่างเช่น Openbox หรือเดสก์ท็อปเช่น GNOME หรือ KDE คุณจะพบเครื่องจำลองสถานีจากเมนูหรือรีบ ในหลายระบบทางลัด CTRL ALT และ T จะเปิดหน้าต่างเทอร์มินัลเช่นกัน
หรืออีกวิธีหนึ่งคือคุณสามารถเปลี่ยนไปใช้ TTY (teletypewriter) เครื่องอื่นซึ่งสามารถเข้าถึงเปลือกบรรทัดคำสั่งได้โดยตรง คุณสามารถทำได้โดยการกด CTRL ALT และ F1 หรือ CTRL ALT และ F2 เป็นต้น
ระดับเชลล์คืออะไร
เมื่อคุณเรียกใช้คำสั่งในเชลล์จะทำงานในบางสิ่งที่เรียกว่าระดับเชลล์ ภายในเชลล์คุณสามารถเปิดเปลือกใหม่ซึ่งทำให้เป็นเปลือกย่อยหรือเปลือกที่เปิดได้
ดังนั้นเชลล์ของผู้ปกครองจะได้รับการพิจารณาว่าอาจจะเป็นเปลือกระดับ 1 และเปลือกสำหรับเด็กจะเป็นเปลือกระดับ 2
วิธีการแสดงระดับเชลล์
ควรมาเป็นอย่างแปลกใจไม่ขึ้นอยู่กับชื่อของบทความว่าวิธีที่คุณสามารถบอกได้ว่าระดับของเชลล์ที่คุณใช้คืออะไรโดยใช้ตัวแปร $ SHLVL
เมื่อต้องการดูระดับของเชลล์ที่คุณกำลังเรียกใช้อยู่ในประเภทต่อไปนี้:
echo $ SHLVL
ค่อนข้างน่าสนใจถ้าคุณเรียกใช้คำสั่งดังกล่าวในหน้าต่าง terminal ที่คุณอาจจะประหลาดใจที่เห็นว่าผลที่ได้คือ 2
อย่างไรก็ตามหากคุณใช้คำสั่งเดียวกันโดยใช้ tty ผลลัพธ์ก็คือ 1
เหตุใดจึงเป็นกรณีนี้ที่คุณอาจถาม ดีเดสก์ท็อปสภาพแวดล้อมที่คุณกำลังเรียกใช้จะถูกเรียกใช้ด้านบนของเปลือก เปลือกดังกล่าวจะเป็นระดับ 1 หน้าต่างเทอร์มินัลใดที่คุณเปิดจากภายในเดสก์ท็อปนั้นต้องเป็นลูกของเปลือกที่เปิดสภาพแวดล้อมเดสก์ท็อปดังนั้นระดับของเชลล์จึงไม่สามารถเริ่มต้นที่หมายเลขอื่นนอกเหนือจาก 2 ได้
TTY ไม่ได้รันระบบเดสก์ท็อปและดังนั้นจึงเป็นเพียงเปลือกระดับ 1 เท่านั้น
วิธีการสร้าง Subshells
วิธีที่ง่ายที่สุดในการทดสอบแนวคิดของเปลือกและเปลือกย่อยดังต่อไปนี้ เปิดหน้าต่างเทอร์มินัลและพิมพ์ข้อมูลต่อไปนี้:
echo $ SHLVL
ที่เรารู้จากหน้าต่างเทอร์มินัลระดับเปลือกต่ำสุดคือ 2
ตอนนี้ภายในหน้าต่าง terminal พิมพ์ต่อไปนี้:
ดวลจุดโทษ
คำสั่ง sh บนตัวเองรันเชลล์แบบโต้ตอบซึ่งหมายความว่าคุณใช้เปลือกภายในเชลล์หรือซับสเกล
ถ้าคุณพิมพ์ข้อความนี้อีกครั้ง:
echo $ SHLVL
คุณจะเห็นว่าระดับเปลือกถูกตั้งค่าเป็น 3 การเรียกใช้คำสั่ง sh จากภายใน subshell จะเปิด subshell ของ subshell และระดับของ shell จะอยู่ที่ระดับ 4
ทำไมระดับเชลล์จึงสำคัญ?
ระดับเปลือกมีความสำคัญเมื่อคิดถึงขอบเขตของตัวแปรภายในสคริปต์ของคุณ
เริ่มต้นด้วยสิ่งที่ง่าย:
สุนัข = ไมซี่echo $ dog ถ้าคุณเรียกใช้คำสั่งดังกล่าวในเชลล์ maisie คำจะถูกแสดงไปยังหน้าต่างเทอร์มินัล เปิดเปลือกใหม่โดยพิมพ์ข้อความต่อไปนี้: ดวลจุดโทษ ถ้าคุณเรียกใช้คำสั่งนี้คุณจะเห็นว่าไม่มีอะไรที่จะถูกส่งกลับจริง: echo $ dog นั่นเป็นเพราะตัวแปร $ dog ใช้ได้เฉพาะในระดับ shell 2. ถ้าคุณพิมพ์ exit เพื่อออกจาก subshell และเรียกใช้ echo $ dog อีกครั้งคำว่า maisie จะปรากฏขึ้นอีกครั้ง นอกจากนี้ยังควรคำนึงถึงพฤติกรรมของตัวแปรระดับโลกภายในเชลล์ เริ่มต้นในหน้าต่างเทอร์มินัลใหม่และพิมพ์ข้อมูลต่อไปนี้: ส่งออกสุนัข = maisieecho $ dog ตามที่คุณคาดหวังว่าคำว่า maisie จะปรากฏขึ้น ตอนนี้เปิด subshell และพิมพ์ echo $ dog อีกครั้ง เวลานี้คุณจะเห็นว่ามีคำว่า maisie ปรากฏขึ้นแม้ว่าคุณจะอยู่ใน subshell เหตุผลนี้คือคำสั่ง export ทำให้ตัวแปร $ dog เป็นตัวแปรระดับโลก การเปลี่ยนตัวแปร $ dog ภายในซับสเปเชียลแม้ว่าคุณจะใช้คำสั่ง export จะไม่ส่งผลกระทบต่อสกิลแม่แบบของมัน หวังว่าจากนี้คุณจะเห็นว่ารู้ระดับเปลือกที่คุณกำลังทำงานในมีความสำคัญบางอย่างเมื่อเขียนสคริปต์ ตัวอย่างที่ฉันได้ให้เป็นเรื่องง่ายมาก แต่ก็เป็นเรื่องธรรมดาสำหรับเชลล์สคริปต์หนึ่งเรียกสคริปต์เชลล์อีกตัวหนึ่งซึ่งจะเรียกใช้สคริปต์เชลล์อีกชุดหนึ่งตอนนี้ทำงานในระดับต่างๆ การรู้ระดับเปลือกมีความสำคัญมาก