जवाबों:
बैश ( bash
) कई उपलब्ध (अभी तक सबसे अधिक इस्तेमाल किया जाने वाला) यूनिक्स गोले में से एक है। बैश का अर्थ है " बी आइन ए गेन एसएच एएल", और मूल बॉर्न शेल ( sh
) का प्रतिस्थापन / सुधार है ।
शेल स्क्रिप्टिंग किसी भी शेल में स्क्रिप्टिंग है , जबकि बैश स्क्रिप्टिंग विशेष रूप से बैश के लिए स्क्रिप्टिंग है। व्यवहार में, हालांकि, "शेल स्क्रिप्ट" और "बैश स्क्रिप्ट" को अक्सर एक दूसरे के स्थान पर उपयोग किया जाता है, जब तक कि प्रश्न में शेल बैश नहीं है।
EDIT: दरअसल, उबंटू में डिफॉल्ट स्क्रिप्टिंग शेल डैश है, जबकि डिफॉल्ट इंटरेक्टिव शेल (आपको एक टर्मिनल को खींचने पर क्या मिलता है) बैश है। बहरहाल, दो शब्द अभी भी विनिमेय हैं।
/bin/sh
है कि /bin/dash
डिफ़ॉल्ट सिस्टम शेल बनाने के लिए सिमलिंक है , लेकिन यह डिफ़ॉल्ट स्क्रिप्टिंग शेल नहीं है, अर्थात ऐसा कोई लिखित नियम नहीं है जिसका आपको पूरी तरह से उपयोग करना है /bin/sh
। जब कोई /bin/sh
इसका उपयोग करता है तो यह मुख्य रूप से पोर्टेबिलिटी कारणों के लिए होता है, जब आप उम्मीद करते हैं कि आपकी स्क्रिप्ट कई यूनिक्स जैसे ओएस प्लेटफॉर्म पर उपयोग की जाएगी, जिनमें से अधिकांश /bin/sh
में पॉसिक्स-कंप्लेंट, बॉर्न-फैमिली शेल है।
परिचय
शेल स्क्रिप्टिंग और Bash
स्क्रिप्टिंग एक ही चीज नहीं है, क्योंकि अन्य शेल मौजूद हैं जैसे sh
कि किसी स्क्रिप्ट को निष्पादित करने के लिए उपयोग किया जा सकता है; जिस स्क्रिप्ट का निष्पादन किया Bash
जाना है, उसे Bash
स्क्रिप्ट के रूप में लेबल किया जाना चाहिए । शब्दों का उपयोग अक्सर परस्पर विनिमय के लिए किया जाता है Bash
, क्योंकि इसकी विस्तारित कार्यक्षमता के साथ तुलना में sh
, कई वितरणों में उपयोगकर्ता स्क्रिप्ट को निष्पादित करने के लिए सबसे अधिक उपयोग किया जाता है। हालाँकि, अन्य गोले हैं जैसे कि Korn (ksh)
, C shell (csh)
और Z shell (zsh)
, लेकिन हम उनके बारे में चर्चा के रूप में यहाँ नहीं जाएंगे sh
और bash
यह उबंटू के लिए सबसे अधिक प्रासंगिक है। एक महान आईबीएम लेख यहाँ लिनक्स में गोले के विकास पर और अधिक विस्तार में चला जाता है और अच्छी तरह से वर्णन करता खोल वास्तुकला और कैसे गोले भिन्न होते हैं।
शेल स्क्रिप्टिंग
Sh
स्टीफन बॉर्न द्वारा विकसित मूल यूनिक्स शेल था; हालांकि डेबियन आधारित सिस्टम और उबंटू dash
उनके sh
शेल के रूप में मानते हैं ( sh
वास्तव में सिम्प्लाइड है dash
)। डेबियन और उबंटू में, की गति के कारण sh
, इसका उपयोग अक्सर महत्वपूर्ण प्रणाली प्रक्रियाओं और स्टार्टअप पर महत्वपूर्ण स्क्रिप्ट को निष्पादित करने के लिए किया जाता है; अधिक विस्तार के लिए Ubuntu विकी देखें । Bash
बॉर्न अगेन शेल के लिए खड़ा है और बाद में ब्रायन फॉक्स द्वारा विकसित किया गया था और मूल को बहुत बढ़ा दिया था sh
। फॉक्स और अन्य का विकास Bash
GNU परियोजना का एक महत्वपूर्ण हिस्सा था। देखें इस के इतिहास के महान चर्चा Bash
और जानकारी के लिए।
यह ध्यान रखना महत्वपूर्ण है कि दोनों sh
और Bash
, जैसा कि उबंटू और अन्य वितरणों में उपयोग किया जाता है, POSIX
आज्ञाकारी हैं, जिसका अर्थ है कि वे शेल में कमांड कैसे निष्पादित किए जाते हैं, इसके बारे में कई मानकों की सदस्यता लेते हैं। यह सुनिश्चित करने के लिए है कि ओएस में उपयोग की जाने वाली लिपियों के परिणामों की विश्वसनीय रूप से भविष्यवाणी की जा सकती है, और शेल के व्यवहार को उन POSIX
मापदंडों के भीतर रखा जा सकता है , क्योंकि यह डेवलपर्स के लिए विशेष रूप से महत्वपूर्ण है। मानकों के बारे में अधिक जानकारी के लिए, आधिकारिक दस्तावेज देखें ।
अक्सर शेल स्क्रिप्ट में प्रत्यय होता है .sh
, भले ही उन्हें bash
स्क्रिप्ट के रूप में निष्पादित करने का इरादा हो , और स्क्रिप्ट #!/bin/bash
के शीर्ष पर होता है। यह वास्तव में कोई फर्क नहीं पड़ता कि स्क्रिप्ट को स्क्रिप्ट कहा जाता है। s या my.script , क्या मायने रखता है कि क्या दुभाषिया के लिए कॉल है /bin/sh
या /bin/bash
। शेल स्क्रिप्ट को sh
या तो कमांड लाइन पर भी बुलाया जा सकता है bash
।
हालांकि, यह नोट करना महत्वपूर्ण है कि परिणाम अलग-अलग हो सकते हैं, जिसके आधार पर दुभाषिया कहा जाता है, क्योंकि सभी bash
कमांड काम नहीं करेंगे sh
, जबकि अधिकांश sh
कमांड काम करेंगे bash
। सामान्य तौर पर, अधिकांश उपयोगकर्ता /bin/bash
अपनी स्क्रिप्ट के लिए उपयोग करना चाहेंगे, ताकि वे विस्तारित सुविधा सेट का लाभ उठा सकें; /bin/sh
यदि आवश्यक हो तो सिस्टम स्क्रिप्ट को निष्पादित किया जा सकता है।
बैश शेल स्क्रिप्टिंग के लिए संसाधन
कभी-कभी उपयोगी संसाधनों को ऑनलाइन खोजना मुश्किल होता है जो अच्छे अभ्यास का पालन करते हैं और यह सलाह देते हैं जो आपको उपयोगी स्क्रिप्ट बनाने की अनुमति देगा। इसके बाद man bash
, सबसे महत्वपूर्ण संसाधनों में से कुछ ग्रेग की विकी , बैश हैकर्स और स्टीव पार्कर की हालिया पुस्तक शेल स्क्रिप्टिंग है जो मुख्य रूप Bash
से ओ'रिली द्वारा प्रकाशित और प्रकाशित है। बैश शुरुआती गाइड द्वारा भी एक अच्छा परिचय दिया जाता है ।
वहाँ Ubuntu, जैसे के लिए उपलब्ध कई गोले हैं bash
, zsh
, ksh
, tcsh
और csh
।
इसलिए कभी भी कोई कहता है कि वह शेल के बारे में बात कर रहा है। हालाँकि, वे गोले एक दूसरे से थोड़ा अलग हैं। इसलिए, जब कोई bash
स्क्रिप्टिंग के बारे में बात करता है , तो वह एक शेल का उपयोग कर रहा है, लेकिन जब कोई शेल स्क्रिप्टिंग के बारे में बात कर रहा है, तो वह उपयोग नहीं कर रहा है bash
। लेकिन जैसा bash
कि आमतौर पर उबंटू के लिए स्क्रिप्टिंग में किया जाता है, वह आमतौर पर है। इसके अलावा, अलग-अलग गोले बहुत सारे पहलुओं में समान हैं, इसलिए यह आमतौर पर कोई फर्क नहीं पड़ता।
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Mar 29 11:53 /bin/sh -> dash*
$ ls -l /bin/dash
-rwxr-xr-x 1 root root 109768 Mar 29 11:53 /bin/dash*
$ ls -l /bin/bash
-rwxr-xr-x 1 root root 955024 Apr 3 08:58 /bin/bash*
इससे पता चलता है कि 'श' 'डैश' का सिम्बल है, और वह / बिन / बैश, जो कि उबंटू पर डिफ़ॉल्ट इंटरेक्टिव शेल है, एक निष्पादन योग्य है जो लगभग 9 बार / बिन / श से बड़ा है।
दरअसल, 'मैन श' (1590 लाइनें) बनाम 'मैन बैश' (5459 लाइनें) से पता चलता है कि बैश पारंपरिक 'श' का एक बड़ा सुपरसेट है।
यहाँ और पढ़ें:
शेल स्क्रिप्ट को पोर्टेबिलिटी ओरिएंटेड स्क्रिप्ट के रूप में परिभाषित किया जाएगा जिसे POSIX- कंप्लांट OS के सिस्टम शेल द्वारा चलाया जा सकता है । सिंटेक्स पोसिक्स मानक द्वारा परिभाषित शेल स्क्रिप्टिंग लैंग्वेज सिंटैक्स के समान या समान होगा। लिनक्स / यूनिक्स / * बीएसडी आदि जैसे अधिकांश पोसिक्स संगत ओएस के लिए यह मानक है, ऑपरेटिंग सिस्टमों में संगतता के लिए पोसिक्स सबसे आम जमीन है।
उपर्युक्त अलग-अलग ओएस गैर-संवादात्मक उपयोग के लिए अलग-अलग गोले लागू करते हैं (अर्थात, सिस्टम स्क्रिप्ट या स्क्रिप्ट जो कि #! /bin/sh
शेलंग का उपयोग करते हैं ) निष्पादित करने के लिए जो कि POSIX कमांड और सिंटैक्स को लागू करने के बगल में, अपने स्वयं के एक्सटेंशन हैं या संभवतः कुछ कम उपयोगी सुविधाओं से अलग हो सकते हैं। प्रदर्शन कारणों के लिए, लेकिन POSIX ग्राउंड विभिन्न POSIX-complios Os के लिए डिज़ाइन की गई स्क्रिप्ट की पोर्टेबिलिटी के उच्च स्तर की अनुमति देता है।
अधिकांश aforementioned OS में अलग-अलग इंटरेक्टिव शेल होते हैं जो आमतौर पर पूरी तरह से बैश होते हैं । बैश बड़े हिस्से में पोसिक्स-अनुपालन है, लेकिन इसमें अतिरिक्त कमांडों का एक बड़ा पूल है और विभिन्न सिंटैक्स का समर्थन करता है। बैश को -पोज़िक्स कमांड-लाइन विकल्प से शुरू करना या 'सेट-पॉ पॉज़िक्स' को निष्पादित करना, जबकि बैश चल रहा है, जो पॉश द्वारा निर्दिष्ट उन क्षेत्रों में पॉसिक्स द्वारा किए गए व्यवहार को बदलकर पॉश मानक के अधिक निकटता का कारण बनेगा, जहां बैश डिफ़ॉल्ट है। भिन्न, देखें: https://www.gnu.org/software/bash/manual/html_node/Bash-POSIX-Mode.html
गोले के लिए निष्पादन योग्य रखने पर समान नियमों के लिए धन्यवाद (वे आमतौर पर '/ बिन /' निर्देशिका में हैं), हमारे पास शेल स्क्रिप्ट बनाने के लिए समान नियम हो सकते हैं, अधिक विशेष रूप से, हम स्पष्ट हैं कि किस मार्ग को इंगित करने के लिए शबंग अभिव्यक्ति में रखा जाए स्क्रिप्ट को चलाने के लिए एक उचित शेल निष्पादन योग्य। यूनिक्स / लिनक्स / * बीएसडी फ़ाइल सिस्टम आंतरिक रूप से एक्सटेंशन का समर्थन नहीं करते हैं, इसलिए फ़ाइल एक्सटेंशन केवल एक अतिरिक्त संकेत के रूप में, या अनुक्रमण प्रयोजनों के लिए काम करते हैं।
विशेष रूप से डेबियन / उबंटू पर, bin/sh
एक सिमलिंक है bin/dash
जो एक डैश शेल का एक निष्पादन योग्य है । यह सिस्टम शेल को डैश करता है, जिसका अनुमान 4x तेज़ है और अधिक कार्यात्मक बैश की तुलना में ~ 1/10 आकार है। स्रोत: https://unix.stackexchange.com/questions/148035/is-dash-or-some-other-shell-faster-than-bash
डेबियन / उबंटू इंटरैक्टिव टर्मिनल डिफ़ॉल्ट रूप से है, जैसा कि कई अन्य यूनिक्स-जैसे ऑपरेटिंग सिस्टम, बैश में है, जिसके लिए पथ भी एक समान है /bin/bash
:।
POSIX.1-2017 मानक: http://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xcu_chap02.html
यदि कोई आदेश या विकल्प POSIX द्वारा परिभाषित नहीं है, तो इसे
#! /bin/sh
पहले से किसी स्क्रिप्ट में न रखें।
अपनी स्क्रिप्ट को bash से POSIX फ़ॉर्म में परिवर्तित करने के लिए, आप स्वचालित रूप से अपनी शेल स्क्रिप्ट में बग्स की जाँच कर सकते हैं या यह देखना चाहते हैं कि आपके bash स्क्रिप्ट में क्या बदलाव आए हैं, आपको इसे POSIX संगत बनाना चाहिए: