डेबियन और उबंटू कुछ चीजों की वजह से डैश (iirc) में चले गए। सबसे पहले, बैश वर्षों में बड़ा हो गया है। वास्तव में, /bin/bash
मेरे उबंटू 8.04 सिस्टम पर बाइनरी लगभग दस गुना (!) जितना बड़ा है /bin/dash
। अब, यह दिन-प्रतिदिन शेल के उपयोग के लिए ज्यादा मायने नहीं रखता है, लेकिन यह निम्न स्थितियों में मायने रखता है:
- डैश बहुत छोटा है और इस तरह यह तेजी से लोड होता है, जो init- स्क्रिप्ट के लिए एक वरदान है। यदि आपको उनमें से कई को शुरू करना है, तो हर बार बैश के बजाय डैश लोड करना, चीजों को काफी गति देना।
- डैश के छोटे आकार के कारण, डेबियन और उबंटू अपने initrd के आकार का एक बहुत बड़ा हिस्सा निकालने में सक्षम हैं, अन्य सामान के लिए अधिक जगह छोड़ते हैं (और फिर से, चीजों को तेज करते हुए)।
स्क्रीप्टिंग के लिए बैश के बजाय डैश का उपयोग करने का नकारात्मक पक्ष यह है कि बहुत से लोग केवल बैश है, तथाकथित बशीज़ के लिए सिंटैक्टिकल निकेट्स का उपयोग करते हैं । बश्मि के उदाहरण इस प्रकार हैं:
echo $SHELL
/bin/bash
a=1234567890
echo ${a}
1234567890
echo ${a:3}
4567890
echo ${a:3:1}
4
और इस:
echo ${a#123}
4567890
दूसरी ओर, डैश का मुख्य रूप से उद्देश्य POSIX आज्ञाकारी होना चाहिए (और इससे अधिक नहीं), यदि आप यह कोशिश करते हैं तो आपको एक खराब सबस्टेशन त्रुटि देगा:
echo $SHELL
/bin/dash
# actually, it will read /bin/bash above, because if you just run dash
# it will not set the $SHELL variable :)
a=1234567890
echo ${a}
1234567890
echo ${a:3}
dash: Bad substitution
यह तब होगा जब आप अपने गोले के लिए दुभाषिया के रूप में /bin/sh
(और इसलिए dash
) उपयोग करते हैं और उनमें बश्मि का उपयोग करते हैं। डेबियन और उबंटू के पास बशीज़ के बारे में अच्छे विकी पृष्ठ हैं और वे सामान्य रूप से गोले में खराब क्यों हैं और विशेष रूप से इनिट-स्क्रिप्ट। इसलिए, आपको सचेत रूप से यह चुनना चाहिए कि आपको अपनी स्क्रिप्ट के लिए इंटरप्रेटर की आवश्यकता है /bin/sh
या नहीं /bin/bash
।
डैश को आपके सिस्टम पर डिफ़ॉल्ट शेल के रूप में उपयोग करने के लिए नहीं माना जाता है। बस इसके लिए बैश का इस्तेमाल करें। अपनी स्क्रिप्ट की पोर्टेबिलिटी के लिए, आप डैश का उपयोग दुभाषिया के रूप में कर सकते हैं ताकि अन्य लिनक्स फ्लेवर और यूनिक्स पर स्क्रिप्ट चलेगी।