श क्या है?
sh
(या शेल कमांड लैंग्वेज) POSIX मानक द्वारा वर्णित एक प्रोग्रामिंग भाषा है । यह कई कार्यान्वयन है ( ksh88
, dash
, ...)। bash
का कार्यान्वयन भी माना जा सकता है sh
(नीचे देखें)।
क्योंकि sh
एक विनिर्देश है, एक कार्यान्वयन नहीं है, /bin/sh
अधिकांश पॉसिक्स सिस्टम पर वास्तविक कार्यान्वयन के लिए एक सिमलिंक (या एक कठिन लिंक) है।
बैश क्या है?
bash
एक sh
असंगत कार्यान्वयन के रूप में शुरू किया गया था (हालांकि यह कुछ वर्षों से POSIX मानक से पहले का है), लेकिन समय बीतने के साथ-साथ इसने कई एक्सटेंशन हासिल कर लिए हैं। इनमें से कई एक्सटेंशन वैध POSIX शेल स्क्रिप्ट के व्यवहार को बदल सकते हैं, इसलिए अपने आप bash
में एक मान्य POSIX शेल नहीं है। बल्कि, यह POSIX खोल भाषा की एक बोली है।
bash
एक --posix
स्विच का समर्थन करता है , जो इसे अधिक POSIX- अनुरूप बनाता है। यह भी POSIX की नकल करने की कोशिश करता है अगर के रूप में आमंत्रित किया sh
।
श = बाश?
लंबे समय तक, अधिकांश GNU / Linux सिस्टम /bin/sh
को इंगित करने के लिए उपयोग किया जाता है /bin/bash
। नतीजतन, दोनों के बीच के अंतर को अनदेखा करना लगभग सुरक्षित हो गया था। लेकिन वह हाल ही में बदलना शुरू हुआ।
सिस्टम के कुछ लोकप्रिय उदाहरण जहां /bin/sh
इंगित नहीं करते हैं /bin/bash
(और जिनमें से कुछ /bin/bash
भी मौजूद नहीं हो सकते हैं) हैं:
- आधुनिक डेबियन और उबंटू सिस्टम, जो डिफ़ॉल्ट रूप
sh
से सहानुभूति रखते हैं dash
;
- बिजीबॉक्स , जो आमतौर पर लिनक्स सिस्टम बूट समय के दौरान चलाया जाता है
initramfs
। यह ash
शेल कार्यान्वयन का उपयोग करता है ।
- बीएसडी और सामान्य रूप से कोई भी गैर-लिनक्स सिस्टम। OpenBSD
pdksh
, कॉर्न शेल के वंशज का उपयोग करता है । FreeBSD sh
मूल UNIX बॉर्न शेल का एक वंशज है। सोलारिस का अपना है sh
जो लंबे समय तक पोसिक्स-अनुरूप नहीं था; हिरलूम परियोजना से एक नि: शुल्क कार्यान्वयन उपलब्ध है ।
आप कैसे पता लगा सकते हैं कि /bin/sh
आपके सिस्टम पर क्या अंक हैं?
जटिलता यह है कि /bin/sh
एक प्रतीकात्मक लिंक या एक कड़ी हो सकती है। यदि यह एक प्रतीकात्मक लिंक है, तो इसे हल करने का एक पोर्टेबल तरीका है:
% file -h /bin/sh
/bin/sh: symbolic link to bash
यदि यह एक कड़ी है, तो प्रयास करें
% find -L /bin -samefile /bin/sh
/bin/sh
/bin/bash
वास्तव में, -L
ध्वज में सहानुभूति और हार्डलिंक दोनों शामिल हैं, लेकिन इस पद्धति का नुकसान यह है कि यह पोर्टेबल नहीं है - POSIX को विकल्प का समर्थन करने की आवश्यकता नहीं है , हालांकि GNU ढूंढते हैं और FreeBSD दोनों इसका समर्थन करते हैं।find
-samefile
शेबंग लाइन
अंत में, यह आप पर तय करना है कि «शेबंग» लाइन लिखकर किसका उपयोग करना है।
उदाहरण के लिए
#!/bin/sh
का उपयोग करेगा sh
(और जो कुछ भी इंगित करने के लिए होता है),
#!/bin/bash
का उपयोग करेगा /bin/bash
अगर यह उपलब्ध है (और एक त्रुटि संदेश के साथ विफल अगर यह नहीं है)। बेशक, आप एक और कार्यान्वयन भी निर्दिष्ट कर सकते हैं, उदाहरण के लिए
#!/bin/dash
कौन सा उपयोग करना है
अपनी स्वयं की स्क्रिप्ट के लिए, मैं sh
निम्नलिखित कारणों से पसंद करता हूं :
- यह मानकीकृत है
- यह बहुत सरल और सीखने में आसान है
- यह POSIX प्रणालियों में पोर्टेबल है - भले ही वे न हों
bash
, उनके पास होना आवश्यक हैsh
bash
साथ ही उपयोग करने के फायदे हैं । इसकी विशेषताएं प्रोग्रामिंग को अन्य आधुनिक प्रोग्रामिंग भाषाओं में प्रोग्रामिंग के समान सुविधाजनक बनाती हैं। इनमें स्कॉप्ड लोकल वैरिएबल और एरेज़ जैसी चीजें शामिल हैं। सादा sh
एक बहुत न्यूनतर प्रोग्रामिंग भाषा है।