जैसा कि कहा गया है, bash
आम तौर पर कई डिस्ट्रो के लिए डिफ़ॉल्ट स्थापना में उपलब्ध है। आपकी स्क्रिप्ट सबसे बड़ी उपयोगकर्ता आधार पर निर्भर होकर नहीं पहुंचेगी zsh
।
आपकी स्क्रिप्ट को डिजाइन करने से पहले जवाब देने के लिए एक महत्वपूर्ण सवाल यह है कि " यह क्यों मायने रखता है कि किस स्क्रिप्ट को निष्पादित किया जाता है? "
विभिन्न गोले अलग-अलग सिंटैक्स का उपयोग करते हैं या अतिरिक्त शेल फ़ंक्शन प्रदान करते हैं जो अन्य गोले द्वारा समर्थित नहीं हो सकते हैं। "सामान्य लिनक्स अंत उपयोगकर्ता दुनिया" के लिए एक स्क्रिप्ट लिखने के लिए, यह निर्धारित करें कि क्या आपकी स्क्रिप्ट किसी भी वाक्यविन्यास या शेल फ़ंक्शन का उपयोग करती है जो किसी विशेष शेल वातावरण पर निर्भर करती है।
उदाहरण के लिए, bash
शेल कुछ ऐसे विस्तार का समर्थन करता है dash
जो बॉर्न शेल, या /bin/sh
उपयोगकर्ता के सिस्टम पर जो भी बिंदुओं द्वारा समर्थित नहीं हैं ।
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Feb 19 2014 /bin/sh -> dash
के echo {1..10}
साथ /bin/sh
तुलना करने की कोशिश करो /bin/bash
और आप बहुत अलग उत्पादन मिलेगा।
वही zsh
जिसके लिए जाता है , ज्यादातर bash
सिंटैक्स का समर्थन करते हुए , अतिरिक्त विस्तार और सिंटैक्स प्रदान करता है जो bash
शेल द्वारा समर्थित नहीं है । विशिष्ट उदाहरणों के लिए गोले की तुलना करने वाली इस तालिका को देखें ।
आप अपने संभावित उपयोगकर्ता आधार bash
को स्क्रिप्ट के पालन से परे व्यापक कर सकते हैं जो काम के साथ बुलाया जाता है #!/bin/sh -u
। हालांकि, यह पूछने के लिए एक और महत्वपूर्ण प्रश्न को जन्म देता है: " अधिक पोर्टेबिलिटी के बदले में क्या बलिदान किया जा रहा है? "
निर्धारित करें कि सुरक्षा चिंताओं, कार्यक्षमता, दक्षता, या आपके द्वारा महसूस की गई किसी अन्य चीज़ से संबंधित अंतर आपकी स्क्रिप्ट के लिए प्राथमिकता है या नहीं, यह बलिदान के लायक होगा। आप किसी ज्ञात सुरक्षा भेद्यता के साथ स्क्रिप्ट के व्यापक प्रसार का उपयोग नहीं कर सकते, क्योंकि यह अधिक वातावरण में काम करता है।
कमांडbash
लिपि की तुलना करते समय इन लिपियों के समर्थन के लिए इन लिपियों के लिए कई लिपियाँ लिखी जाती हैं । कई और लोग आपकी स्क्रिप्ट को चलाने में सक्षम होंगे, अगर यह zsh
शेल पर्यावरण के लिए विशेष या किसी अन्य वाक्यविन्यास पर निर्भर करता है।
इसके अलावा, इस बात का भी ध्यान रखें कि आपका अंततः नियंत्रण नहीं है कि उपयोगकर्ता स्क्रिप्ट को कैसे निष्पादित करता है ( विभिन्न गोले में स्क्रिप्ट डीबग करने के लिए भी उपयोगी है ):
याद रखें कि यदि आप किसी शेल स्क्रिप्ट ("sh scriptname") को पढ़ने के लिए इसे सीधे निष्पादित करने के बजाय "(./scriptname") का उपयोग करते हैं, तो शेल शेल स्क्रिप्ट की शुरुआत में सभी टिप्पणियों को टिप्पणियों के रूप में मानेगा। विशेष रूप से, स्क्रिप्ट को निष्पादित करने के लिए दुभाषिया का उपयोग करने वाली टिप्पणी ("#! / Bin / sh -u") को नजरअंदाज कर दिया जाएगा, जैसा कि उस दुभाषिया के पास सूचीबद्ध सभी विकल्पों में से होगा।
तो, आप इसके बारे में सबसे अच्छा कर सकते हैं अपनी स्क्रिप्ट को पोर्टेबल बनाते हैं, इसलिए जब तक कि यह कैसे कार्य करता है, इसके लिए कोई महान बलिदान नहीं है।
आप बैश कोडिंग कन्वेंशन - स्टैक ओवरफ्लो भी देख सकते हैं ।
zsh
लोकप्रिय हो सकते हैं जबकि अन्य (बैंकिंग क्षेत्र) यह लगभग अनसुना है। मुझे लगता है कि अगर आपको इस पर उचित सलाह की आवश्यकता है तो आपको बहुत अधिक जानकारी देनी चाहिए।