जब एक शेल स्क्रिप्ट में # के बजाय #! / Bin / bash का उपयोग करना बेहतर है?
जब आप एक नई शेल स्क्रिप्ट का निर्माण कर रहे हैं, तो आप यह सुनिश्चित करना चाहते हैं कि यह यथासंभव मुक्त है, लेकिन कभी-कभी यह जानने में थोड़ा भ्रमित हो सकता है कि आपके लिए कौन सा शेबंग सबसे अच्छा है। उस नोट पर, आज के SuperUser Q & A पोस्ट में एक भ्रमित पाठक के प्रश्न का उत्तर है.
आज का प्रश्न और उत्तर सत्र सुपरयूज़र के सौजन्य से आता है-स्टैक एक्सचेंज का एक उपखंड, क्यू एंड ए वेब साइटों का एक समुदाय-संचालित समूह है।.
प्रश्न
सुपरयूज़र रीडर हेंड्रे जानना चाहता है कि इसका उपयोग कब करना बेहतर है #! / Bin / bash के बजाय #! / Bin / श शेल स्क्रिप्ट में:
यह कब उपयोग करना अधिक उचित है #! / Bin / bash बजाय #! / Bin / श एक शेल स्क्रिप्ट में?
कब इस्तेमाल करना बेहतर है #! / Bin / bash के बजाय #! / Bin / श एक शेल स्क्रिप्ट में?
उत्तर
सुपरयूजर योगदानकर्ता के पास हमारे लिए जवाब है:
संक्षेप में:
- कई गोले हैं जो पोसिक्स श विनिर्देश के सुपरसेट को लागू करते हैं। विभिन्न प्रणालियों पर, / Bin / श राख, बाश, पानी का छींटा, ksh, zsh, आदि के लिए एक कड़ी हो सकती है। यह हमेशा sh- संगत होगा, कभी भी मछली या मछली नहीं।.
- जब तक आप केवल श फीचर्स से चिपके रहते हैं, आप उपयोग कर सकते हैं (और शायद यह भी होना चाहिए) #! / Bin / श और स्क्रिप्ट को ठीक काम करना चाहिए, चाहे वह कोई भी हो.
- यदि आप बैश-विशिष्ट सुविधाओं (यानी सरणियों) का उपयोग करना शुरू करते हैं, तो आपको विशेष रूप से बैश का अनुरोध करना चाहिए, भले ही / Bin / श पहले से ही आपके सिस्टम पर बैश है, यह हर किसी के सिस्टम पर नहीं हो सकता है, और आपकी स्क्रिप्ट वहां नहीं चलेगी। यही बात zsh और ksh पर भी लागू होती है.
- यहां तक कि अगर स्क्रिप्ट केवल निजी उपयोग के लिए है, तो आप देख सकते हैं कि कुछ ऑपरेटिंग सिस्टम बदल जाते हैं / Bin / श उन्नयन के दौरान। उदाहरण के लिए, डेबियन पर यह बैश हुआ करता था, लेकिन बाद में इसे बहुत कम डैश के साथ बदल दिया गया। लिपियों में बशीश का प्रयोग किया गया था लेकिन #! / Bin / श अचानक टूट गया.
हालाँकि:
- यहाँ तक की #! / Bin / bash यह सही नहीं है। विभिन्न प्रणालियों पर, बैश में रह सकते हैं / Usr / bin, / Usr / pkg / bin, या / Usr / स्थानीय / बिन.
- एक अधिक विश्वसनीय विकल्प है #! / usr / bin / env बैश, जो उपयोग करता है $ पथ. हालांकि एनवी टूल खुद भी सख्ती से गारंटीकृत नहीं है, / Usr / bin / env अभी भी से अधिक सिस्टम पर काम करता है / Bin / bash कर देता है.
स्पष्टीकरण में कुछ जोड़ना है? टिप्पणियों में विचार व्यक्त करो। अन्य टेक-सेवी स्टैक एक्सचेंज उपयोगकर्ताओं से अधिक उत्तर पढ़ना चाहते हैं? पूरी चर्चा धागा यहाँ देखें.
चित्र साभार: विकिपीडिया