मैंने इस साइट पर यह प्रश्न देखा है और इसने मुझे यह प्रश्न पूछने के लिए प्रेरित किया। मैं यूनिक्स में जानना चाहता हूं कि एक निष्पादन योग्य और शेल स्क्रिप्ट में क्या अंतर है?
मैंने इस साइट पर यह प्रश्न देखा है और इसने मुझे यह प्रश्न पूछने के लिए प्रेरित किया। मैं यूनिक्स में जानना चाहता हूं कि एक निष्पादन योग्य और शेल स्क्रिप्ट में क्या अंतर है?
जवाबों:
एक निष्पादन योग्य निष्पादन योग्य सेट के साथ किसी भी फ़ाइल को संदर्भित करता है जिसे निष्पादित किया जा सकता है (भले ही कार्यक्रम के वास्तविक चलने में त्रुटियां हों)।
एक शेल स्क्रिप्ट एक विशिष्ट प्रकार का निष्पादन योग्य है जिसका उद्देश्य #!
एक व्याख्याकार को निर्दिष्ट करने के लिए निर्देश का उपयोग करके शेल द्वारा व्याख्या किया जाना है ।
एक स्क्रिप्ट एक फाइल है जो:
एक शेल स्क्रिप्ट एक स्क्रिप्ट है जिसका दुभाषिया एक खोल है । यूनिक्स दुनिया में, "शेल" गोले के परिवार को संदर्भित करता है जो बॉर्न शेल से मिलता जुलता है ; आधुनिक ऐसे गोले (राख, बाश, क्श, ज़श, ...) पोसिक्स शैल मानक के अनुरूप हैं । आमतौर पर, शब्द "शेल" में csh, tsh, मछली, जैसे अन्य कमांड दुभाषिए शामिल हो सकते हैं ...
एक निष्पादन योग्य कोई फ़ाइल है जिसे निष्पादित किया जा सकता है। प्रभावी रूप से निष्पादन योग्य होने के लिए, एक फ़ाइल में दो गुण होने चाहिए:
ls -l
: x
चरित्र को अनुमति कॉलम में मौजूद होना चाहिए।फ़ाइल का प्रारूप एक होना चाहिए जिसे सिस्टम निष्पादन योग्य के रूप में पहचानता है। निष्पादन योग्य स्वरूपों को कई श्रेणियों में विभाजित किया जा सकता है:
#!
एक फाइल के लिए एक पथ के बाद दो अक्षर शामिल होते हैं । ऐसी फ़ाइल को निष्पादित करने के लिए, कर्नेल इंटरप्रेटर प्रोग्राम को निष्पादित करता है और इसे एक तर्क के रूप में स्क्रिप्ट के लिए मार्ग देता है।ध्यान दें कि एक निष्पादन योग्य होना सिस्टम पर निर्भर है। उदाहरण के लिए, एक amd64 लिनक्स बाइनरी amd64 लिनक्स सिस्टम पर निष्पादन योग्य है, लेकिन 32-बिट सिस्टम पर नहीं। एंड्रॉइड के लिए एक बाइनरी एक सामान्य लिनक्स इंस्टॉलेशन पर निष्पादन योग्य नहीं है। एक विंडोज़ निष्पादन योग्य केवल लिनक्स पर निष्पादन योग्य है यदि वाइन मौजूद है। #!/usr/local/bin/ruby
यदि कोई प्रोग्राम वहां से शुरू होता है तो केवल एक निष्पादन योग्य होता है /usr/local/bin/ruby
।
एक शेल स्क्रिप्ट आमतौर पर निष्पादन योग्य होती है। लेकिन यह गैर-निष्पादन योग्य हो सकता है, अगर आपके पास इसे निष्पादित करने की अनुमति नहीं है। आप अभी भी व्याख्याकार (उदाहरण के लिए bash /path/to/script
) को स्पष्ट रूप से पारित करके इसकी व्याख्या कर सकते हैं - "इसकी व्याख्या की है" यह "निष्पादित" कहने का एक फैंसी तरीका है।
खोल स्क्रिप्ट:
एक शेल स्क्रिप्ट कमांड की एक श्रृंखला है जो एक शेल (आमतौर पर श या श-संगत शेल, कभी-कभी एक और) द्वारा व्याख्या की जाएगी।
स्क्रिप्ट नाम, लेकिन ".sh" या ".bash" या ".csh" आदि में अंत करने की आवश्यकता नहीं है (शेल द्वारा दिए गए संकेत के रूप में इसे लॉन्च किया जाना चाहिए)।
स्पष्टता के लिए मैं यह मानूंगा: कि स्क्रिप्ट का नाम है script
, और इसे खोल दिया जाना चाहिए bash
।
शेल में इसे लॉन्च करने का एक विशिष्ट तरीका तब होगा: bash /absolute/path/to/the/script
या bash ./relative/path/to/the/script
। इस तरह, इसे निष्पादन योग्य बिट सेट करने की आवश्यकता नहीं है, क्योंकि यह केवल बैश द्वारा पढ़ा जाता है, जो तब सामग्री को निष्पादित करता है।
यह कर सकते हैं भी सेट किया जा + x (निष्पादन) के साथ अपने वर्तमान खोल सत्र से सीधे शुरू करने के लिए अनुमति देने के लिए: / पूर्ण / path / to / / लिपि (या ./relative/path/to/the/script)। खबरदार: डिफ़ॉल्ट रूप से, जब उस तरह से लॉन्च किया जाता है, तो यह आपके द्वारा टाइप किए गए शेल के माध्यम से या पॉज़िक्स शेल (व्यवहार ओएस निर्भर है) के माध्यम से लॉन्च किया जाता है, इसलिए संभवतः यह वह शेल नहीं हो सकता है जिसे इसके द्वारा चलाया जाना चाहिए। इसलिए आप स्क्रिप्ट की पहली पंक्ति के रूप में निर्दिष्ट (और कर सकते हैं): #! / पथ / से / अच्छा / शेल जो आपके ओएस को इंगित करता है कि स्क्रिप्ट को वास्तव में / पथ / से / अच्छा / शेल के बजाय लॉन्च किया जाना चाहिए।
निष्पादन:
एक निष्पादन योग्य एक फ़ाइल है जिसमें उपयोगकर्ता (ओं) / समूह (ओं) के लिए "x" बिट सेट है जिसे इसके द्वारा लॉन्च किया जाना चाहिए। यह आमतौर पर एक "बाइनरी", या एक स्क्रिप्ट हो सकता है।
युक्ति: file /some/file
आपको फ़ाइल की सामग्री के बारे में अधिक बता सकता है। कोशिश करें file /usr/bin/bash
या file /etc/profile
कुछ उदाहरण देखें।