เรียนรู้วิธีการใช้ Subshells อย่างถูกต้องโดยใช้สคริปต์ทุบตี

วิธีการสั่งให้ Subshells ทำงานแบบขนานในพื้นหลัง

เปลือกเป็นส่วนติดต่อพื้นฐานสำหรับการป้อนคำสั่งบนระบบลีนุกซ์ ด้วยคุณสามารถป้อนคำสั่งได้โดยตรงหรือระบุไฟล์ (สคริปต์) ที่มีลำดับคำสั่งที่จะเรียกใช้ เปลือกหอยจัดอยู่ในลำดับชั้นและเปลือกใด ๆ สามารถสร้างเปลือกใหม่ได้ เปลือกใหม่ถือเป็นขั้นตอนย่อยสำหรับย่อย ๆ ของเปลือกแม่ซึ่งจะสร้างขึ้นมา

โดยค่าเริ่มต้น subshell จะขึ้นอยู่กับ parent ในแง่ที่ว่าถ้า process parent ถูกยุติลง subshell ก็จะยุติด้วย เอาท์พุทใด ๆ จะถูกส่งผ่านจากเปลือกย่อยไปยังเปลือกแม่

วิธีการสร้าง Subshell

ในสคริปต์เชลล์ Bash คุณจะสร้าง subshell โดยใช้สัญกรณ์วงเล็บ:

# echo "$ count" sleep 1 ((นับ ++)) ทำเสร็จแล้ว) echo "Finished"

ในตัวอย่าง วนรอบในขณะ อยู่ในวงเล็บซึ่งทำให้มันถูกเรียกใช้ในเปลือกย่อยของเปลือกที่มีการเรียกใช้ไฟล์สคริปต์

การเรียกใช้ Subshell ในเบื้องหลัง

ถ้าคุณไม่ระบุว่า subshell จะถูกเรียกใช้ในแบ็คกราวน์เปลือกหลักจะรอให้ subshell เสร็จสิ้นก่อนดำเนินการต่อกับส่วนที่เหลือของสคริปต์ อย่างไรก็ตามถ้าคุณต้องการเรียกใช้ subshells แบบขนานคุณสามารถเรียกใช้งานได้ในแบบเบื้องหลังซึ่งสามารถทำได้โดยใช้อักขระเครื่องหมายกลางต่อจากการแสดงออกของซับสเปรดตามที่แสดงที่นี่:

# echo "$ count" sleep 1 ((นับ ++)) เสร็จสิ้น) & echo "Finished" (เสร็จสิ้น)

กำลังเรียกใช้หลาย Subshells ในแบบขนาน

ถ้าคุณสร้างหลาย subshells เป็น กระบวนการ พื้นหลังคุณสามารถเรียกใช้งานแบบขนาน โดยปกติระบบปฏิบัติการจะใช้โปรเซสเซอร์หรือคอร์ที่แตกต่างกันสำหรับแต่ละกระบวนการและกระบวนการย่อยโดยสมมติว่ามีโปรเซสเซอร์หรือแกนประมวลผลอย่างน้อยหนึ่งตัวเนื่องจากมีกระบวนการ มิฉะนั้นงานจะถูกกำหนดให้กับโปรเซสเซอร์หรือแกนเดียวกัน ในกรณีนี้โปรเซสเซอร์หรือแกนจะสลับระหว่างงานที่มอบหมายไปเรื่อย ๆ จนกระทั่งงานเสร็จสิ้น ตัวอย่างต่อไปมีสองโพรเซส คนแรกนับตั้งแต่ 1 ถึง 99 คนและคนที่สองนับตั้งแต่ 1000 ถึง 1099

"count count" = "1" ("count count" = "1") ในกรณีที่มีการเรียกใช้ subshell "#" 1099] ทำ echo "$ count" sleep 1 ((นับ ++)) done) & echo "Finished"

ใช้คำสั่ง รอ เพื่อบอกกระบวนการหลักเพื่อรอให้กระบวนการย่อยดำเนินการเสร็จสิ้นก่อนดำเนินการกับส่วนที่เหลือของสคริปต์:

"count count" = "1" ("count count" = "1") ในกรณีที่มีการเรียกใช้ subshell "#" 1099] ทำ echo "$ count" sleep 1 ((นับ ++)) done) & รอ echo "Finished"

ใช้สำหรับ Subshells

Subshells มีประโยชน์เมื่อจำเป็นต้องใช้คำสั่งในสภาพแวดล้อมหรือไดเรกทอรีเฉพาะ ถ้าคำสั่งแต่ละคำสั่งทำงานในซับสเกลที่แตกต่างกันไม่มีความเสี่ยงใดที่การตั้งค่าตัวแปรจะถูกผสมขึ้น เมื่อเสร็จสิ้นการตั้งค่าและไดเร็กทอรีปัจจุบันจะไม่จำเป็นต้องได้รับการกู้คืนเนื่องจากสภาพแวดล้อมของโพรเซสย่อยของกระบวนการย่อยจะไม่ได้รับผลกระทบใด ๆ

Subshells สามารถใช้ใน คำจำกัดความของฟังก์ชัน เพื่อให้สามารถทำงานได้หลายครั้งด้วยพารามิเตอร์ที่แตกต่างกัน