श क्या है?
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एक बहुत न्यूनतर प्रोग्रामिंग भाषा है।