ดูเหมือนว่าข้อผิดพลาดในหลายเปลือกหอยนี้จะทำงานได้ตามที่คาดไว้กับksh93และzsh
พื้นหลัง:
เชลล์ส่วนใหญ่ดูเหมือนจะวิ่งวนรอบในขณะที่เชลล์หลักและ
Bourne Shellระงับทั้งเชลล์หากคุณพิมพ์ ^ Z ด้วยเชลล์ที่ไม่ใช่การล็อกอิน
bash จะหยุดเฉพาะsleep
และจากนั้นปล่อยลูป while เพื่อสนับสนุนการพิมพ์ shell prompt ใหม่
เส้นประทำให้คำสั่งนี้ไม่สามารถระงับได้
ด้วยksh93สิ่งต่าง ๆ ทำงานแตกต่างกันมาก:
ksh93ทำเช่นเดียวกันในขณะที่คำสั่งเริ่มต้นเป็นครั้งแรก แต่เป็นsleep
buitin ใน ksh93, ksh93 มีตัวจัดการที่ทำให้ห่วงในขณะที่จะแยกเปลือกหลักแล้วหยุดในเวลาที่คุณพิมพ์ ^ Z
หากคุณอยู่ในksh93ในภายหลังให้พิมพ์fg
ลูกที่แยกออกซึ่งยังคงเรียกใช้ลูปต่อไป
คุณเห็นความแตกต่างหลักเมื่อเปรียบเทียบข้อความ jobcontrol จาก bash และ ksh93:
รายงานทุบตี :
[1]+ Stopped sleep 1
แต่รายงานksh93 :
^Z[1] + Stopped while true; do echo .; sleep 1; done
zshทำงานคล้ายกับksh93
ด้วยเชลล์ทั้งสองคุณมีกระบวนการเดียว (เชลล์หลัก) ตราบใดที่คุณไม่พิมพ์ ^ Z และสองเชลล์กระบวนการหลังจากคุณพิมพ์ ^ Z
$?
การกลับมาและอื่น ๆไม่ได้แล้วtrue
true
อาจ. ฉันคิด.