यह कई गोले में एक बग की तरह दिखता है, यह ksh93 और zsh के साथ अपेक्षित के रूप में काम करता है ।
पृष्ठभूमि:
अधिकांश शेल मुख्य शेल के अंदर लूप चलाते समय लगते हैं और
यदि आप गैर-लॉगइन शेल के साथ ^ Z टाइप करते हैं तो बॉर्न शेल पूरे शेल को निलंबित कर देता है
बैश केवल निलंबित करता है sleep
और फिर एक नया शेल प्रॉम्प्ट प्रिंट करने के पक्ष में जबकि लूप छोड़ देता है
डैश इस आदेश को बिना सोचे समझे बनाता है
Ksh93 के साथ , चीजें बहुत अलग हैं:
ksh93 वही करता है, जबकि कमांड को पहली बार शुरू किया जाता sleep
है , लेकिन जैसा कि ksh93 में एक buitin है, ksh93 में एक हैंडलर है, जो मुख्य लूप को बंद करने के लिए लूप का कारण बनता है और फिर उस समय निलंबित कर देता है जब आप ^ Z।
यदि आप बाद में ksh93 टाइप करते हैं fg
, तो बंद बच्चा जो अभी भी लूप चलाता है, जारी है।
बैश और ksh93 से जॉबकंट्रोल संदेशों की तुलना करते समय आप मुख्य अंतर देखते हैं:
बैश रिपोर्ट:
[1]+ Stopped sleep 1
लेकिन ksh93 रिपोर्ट:
^Z[1] + Stopped while true; do echo .; sleep 1; done
zsh के लिए इसी तरह बर्ताव करता है ksh93
दोनों गोले के साथ, आपके पास एक ही प्रक्रिया (मुख्य शेल) है जब तक आप ^ Z टाइप नहीं करते हैं, और दो शेल प्रक्रियाएँ टाइप करते हैं।
$?
वापसी में, और ऐसाtrue
नहीं हैtrue
। शायद। मुझे लगता है।