आपको केवल कभी उपयोग करना चाहिए #! /bin/sh
।
आपको शेल स्क्रिप्ट में कभी भी बैश (या zsh, या फिश, या ...) एक्सटेंशन का उपयोग नहीं करना चाहिए।
आपको केवल शेल स्क्रिप्ट लिखना चाहिए जो शेल भाषा के किसी भी कार्यान्वयन के साथ काम करती है (सभी "उपयोगिता" प्रोग्राम जो शेल के साथ ही जाते हैं)। इन दिनों आप संभवतः POSIX.1-2001 ( not -2008) को शेल और उपयोगिताओं में सक्षम होने के लिए आधिकारिक के रूप में ले सकते हैं, लेकिन इस बात से अवगत रहें कि हो सकता है कि आप एक दिन अपनी लिपि को एक विरासत प्रणाली (जैसे Solaris) में पोर्ट कर सकें। या एआईएक्स) जिसका खोल और उपयोगिताओं को लगभग 1992 में जमे हुए किया गया था।
क्या, गंभीरता से ?!
हां गंभीरतापूर्वक।
यहाँ बात है: शैल एक भयानक प्रोग्रामिंग भाषा है। इसके लिए केवल एक चीज है जो यह है कि /bin/sh
एक और केवल स्क्रिप्ट दुभाषिया है जो हर यूनिक्स इंस्टॉलेशन की गारंटी है।
यहाँ दूसरी बात है: कोर पर्ल 5 इंटरप्रेटर ( /usr/bin/perl
) की कुछ पुनरावृति अधिक संभावना है कि यह बेतरतीब ढंग से चयनित यूनिक्स इंस्टॉलेशन पर उपलब्ध (/(usr|opt)(/(local|sfw|pkg)?)?/bin/bash
है। अन्य अच्छी स्क्रिप्टिंग लैंग्वेज (पायथन, रूबी, नोड.जेएस, इत्यादि - मैं PHP और Tcl को उस श्रेणी में भी शामिल करूँगा जब शेल की तुलना) भी लगभग बैश और अन्य विस्तारित शेल के रूप में उपलब्ध है।
इसलिए, यदि आपके पास बैश स्क्रिप्ट लिखने का विकल्प है, तो आपके पास एक प्रोग्रामिंग भाषा का उपयोग करने का विकल्प है जो इसके बजाय भयानक नहीं है।
अब, सरल शेल स्क्रिप्ट, जिस तरह से क्रोन जॉब या किसी चीज़ के अनुक्रम में कुछ प्रोग्राम चलाए जाते हैं, उन्हें शेल स्क्रिप्ट के रूप में छोड़ने में कुछ भी गलत नहीं है। लेकिन सरल शेल स्क्रिप्ट में सरणियों या कार्यों या [[
यहां तक कि आवश्यकता नहीं है । और आपको केवल जटिल शेल स्क्रिप्ट लिखना चाहिए जब आपके पास कोई अन्य विकल्प नहीं हो। उदाहरण के लिए, ऑटोकॉन्फ़ स्क्रिप्ट, अभी भी शैल स्क्रिप्ट ठीक से हैं। लेकिन उन लिपियों को हर/bin/sh
उस अवतार पर चलाना पड़ता है जो प्रोग्राम के कॉन्फिगर होने के लिए प्रासंगिक है। और इसका मतलब है कि वे किसी भी एक्सटेंशन का उपयोग नहीं कर सकते हैं। आपको शायद इन दिनों पुराने स्वामित्व वाले यूनिक्स के बारे में परवाह करने की ज़रूरत नहीं है, लेकिन आपको शायद वर्तमान ओपन-सोर्स बीएसडी के बारे में परवाह करनी चाहिए , जिनमें से कुछ स्थापित नहीं हैंbash
डिफ़ॉल्ट रूप से, और एम्बेडेड वातावरण जो आपको केवल एक न्यूनतम शेल देते हैं और busybox
।
अंत में, जिस क्षण आप खुद को एक ऐसी सुविधा चाहते हैं जो पोर्टेबल शेल भाषा में उपलब्ध नहीं है, यह एक संकेत है कि शेल स्क्रिप्ट रहने के लिए स्क्रिप्ट बहुत जटिल हो गई है। इसके बजाय एक बेहतर भाषा में इसे फिर से लिखें।
bash
फ़ंक्शन और सिंटैक्स के बजाय फ़ंक्शन और सिंटैक्स का उपयोग कर रहे हैंsh
।