बैश स्क्रिप्ट के लिए .sh या .bash एक्सटेंशन का उपयोग करें?


36

( Ubuntu-OSX संगतता और उपयोग में आसानी और POSIX के लिए # #! / Bin / sh या #! / Bin / bash का उपयोग करें देखें )

अगर मैं अपनी स्क्रिप्ट को बैश शेल का उपयोग करना चाहता हूं, तो .bash एक्सटेंशन का उपयोग वास्तव में बैश का उपयोग करता है या क्या यह सिस्टम कॉन्फिगरेशन / 1 हेबैंग लाइन पर निर्भर करता है। यदि दोनों प्रभाव में थे, लेकिन अलग-अलग, जो पूर्वता होगी?

मुझे यकीन नहीं है कि क्या .sh के साथ मेरी स्क्रिप्ट्स को समाप्त करना है। केवल "शेल स्क्रिप्ट" को इंगित करने के लिए और फिर पहली पंक्ति को बैश शेल (जैसे #!/usr/bin/env bash) का चयन करें या क्या उन्हें बस .bash (साथ ही लाइन 1 सेटिंग) के साथ समाप्त करना है। )। मैं चाहता हूं कि बैश को लागू किया जाए।


3
मुझे नहीं लगता कि मैंने कभी .bashविस्तार देखा है । इसके अलावा, यह डेबियन नीति संकुल में लिपियों के लिए है जो एक binफ़ोल्डर में लैंड करता है जिसमें एक्सटेंशन नहीं है।
मूरू

जवाबों:


19

.bash एक्सटेंशन का उपयोग वास्तव में बैश को लागू करता है या क्या यह सिस्टम कॉन्फिगरेशन / 1 हेबैंग लाइन पर निर्भर करता है।

यदि आप स्पष्ट रूप से एक दुभाषिया का उपयोग नहीं करते हैं, तो दुहराया जाने वाला दुभाषिया shebangस्क्रिप्ट में प्रयुक्त द्वारा निर्धारित किया जाता है। यदि आप विशेष रूप से एक दुभाषिया का उपयोग करते हैं तो दुभाषिया को परवाह नहीं है कि आप अपनी स्क्रिप्ट के लिए क्या विस्तार देते हैं। हालांकि, यह विस्तार दूसरों के लिए बहुत स्पष्ट है कि यह किस प्रकार की स्क्रिप्ट है।

[sreeraj@server ~]$ cat ./ext.py
#!/bin/bash
echo "Hi. I am a bash script"

देखें, .pyबैश स्क्रिप्ट का विस्तार इसे एक पाइथन स्क्रिप्ट नहीं बनाता है।

[sreeraj@server ~]$ python ./ext.py
  File "./ext.py", line 2
    echo "Hi. I am a bash script"
                                ^
SyntaxError: invalid syntax

इसकी हमेशा एक bashस्क्रिप्ट होती है।

[sreeraj@server ~]$ ./ext.py
Hi. I am a bash script

23

स्क्रिप्ट के नामकरण का इस बात से कोई लेना-देना नहीं है कि इसे कैसे चलाया जाता है।

शेबबैंग लाइन परिभाषित करती है कि स्क्रिप्ट को चलाने के लिए किस दुभाषिया का उपयोग किया जाता है।

अगर कोई स्क्रिप्ट sh, bash, perl है, तो मैं व्यक्तिगत रूप से परवाह नहीं करता हूँ, इसलिए जो कुछ भी मैं इसे नाम देता हूं, वह इसे करता है; मुझे एक एक्सटेंशन निरर्थक मिला। मुझे file scriptnameपता चलेगा कि क्या फ़ाइल है अगर मैं यह जानना चाहता हूं।

इसलिए यदि आप चाहते हैं कि आपकी स्क्रिप्ट को पहली पंक्ति के रूप में bashउपयोग #!/bin/bashकिया जाए।


4
इसके अलावा, यदि स्क्रिप्ट की कार्यान्वयन की पसंद कभी भी बदल जाती है (कहते हैं कि यह पायथन, पर्ल, सी ... में फिर से लिखा गया है), .sh-स्टाइल एक्सटेंशन नहीं होने का मतलब है कि इसका नाम बदलने की कोई आवश्यकता नहीं है। (निश्चित रूप से एक .shविस्तार के साथ एक द्विआधारी उत्पादन सी ​​कार्यक्रम को रोकने के लिए कुछ भी नहीं है , यह सिर्फ भ्रामक होगा।)
स्टीफन किट

2
#!/usr/bin/env bashपोर्टेबिलिटी के लिए उपयोग करें , यहां चर्चा की गई stackoverflow.com/a/10383546/54964
Léo Léopold Hertz ert

4
@wurtel (belated टिप्पणी, ठीक है?) एक एक्सटेंशन imho जोड़ना अतिरेक से बहुत दूर है। अधिकांश संपादक विस्तार के आधार पर वाक्य रचना हाइलाइटिंग का समर्थन करते हैं, साथ ही यह फ़ाइल प्रकार की तत्काल दृश्यता के लिए समझ में आता है। स्पष्टता और पठनीयता बहुत मायने रखती है।
रॉल्फबली

@ रॉल्फबली: मैं जिन संपादकों का उपयोग करता हूं, वे शेबंग को पहचानते हैं और वाक्य रचना हाइलाइटिंग प्रदान करते हैं। स्पष्टता उपयोगी है, लेकिन अधिकांश समय हम एक कमांड निष्पादित करना चाहते हैं और यह अच्छा है अगर मुझे कम टाइप करना है और अगर मुझे इसकी कार्यान्वयन भाषा याद नहीं है।
होनतवेरी लेवेंटे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.