श और बैश में अंतर


1303

शेल प्रोग्राम लिखते समय, हम अक्सर उपयोग करते हैं /bin/shऔर /bin/bash। मैं आमतौर पर उपयोग bashकरता हूं, लेकिन मुझे नहीं पता कि उनके बीच क्या अंतर है।

मुख्य अंतर क्या है bashऔर sh?

क्या हम जब में प्रोग्रामिंग के बारे में पता होना करने की आवश्यकता है bashऔर sh?


21
बॉश और बॉन्ड शेल पर काम करने वाले संबंधित कोड की एक उपयोगी सूची के लिए, mywiki.wooledge.org/Bashism
StackExchange saddens dancek

1
आप श और इसकी कमांड भाषा के लिए POSIX मानक देख सकते हैं : * sh * शेल कमांड लैंग्वेज
Maurício C Antunes

7
एक सामान्य नियम के रूप में, सभी श लिप्स पॉश कम्पैटिबिलिटी की बदौलत बैश के तहत चलेंगे, लेकिन सभी बैश स्क्रिप्ट श के तहत नहीं चल सकते हैं, जिन मुख्य अंतरों को आप नोटिस करते हैं वे [[]] के बजाय []] तुलनात्मक चीजें हैं जो अनछुए स्थानों की अनुमति देती हैं, $ [()) के बजाय $ [] अंकगणित के भाव, और अन्य चीजें जैसे "इसके बहुत बड़े और बहुत धीमे" सीधे बैश डॉक्स से .. लेकिन नए स्क्रिप्टर्स को खुद को श-संगत स्क्रिप्ट तक सीमित करने की आवश्यकता नहीं है जब तक कि वे कुछ के लिए शूटिंग न करें। पिछड़ी अनुकूलता, जो अधिक बार नहीं है, इन दिनों ऐसा नहीं है, आखिर यह वर्ष (या ...) वर्ष 2014 सही था ??
ऑसिरिसगोथरा

जवाबों:


1140

श क्या है?

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भी मौजूद नहीं हो सकते हैं) हैं:

  1. आधुनिक डेबियन और उबंटू सिस्टम, जो डिफ़ॉल्ट रूप shसे सहानुभूति रखते हैं dash;
  2. बिजीबॉक्स , जिसे आमतौर पर लिनक्स सिस्टम बूट समय के दौरान चलाया जाता है initramfs। यह ashशेल कार्यान्वयन का उपयोग करता है ।
  3. बीएसडी और सामान्य रूप से कोई भी गैर-लिनक्स सिस्टम। 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एक बहुत न्यूनतर प्रोग्रामिंग भाषा है।


यदि आप स्क्रिप्ट bashको सिंटैक्स त्रुटि के मामले में प्रदर्शन के तरीके से अधिक उपयोगी त्रुटि संदेशों के साथ चलाते हैं । आप बस बैश का उपयोग करके समय बचा सकते हैं।
PHPst

%आपकी कमांड लाइनों की शुरुआत में क्या मतलब है?
जोसेफ हारीटॉट

@JosephHarriott यह एक संकेत है: एक ऐसा अक्षर जो स्वयं शेल द्वारा मुद्रित होता है, जिसके बाद आपका कमांड अनुसरण करता है। कुछ गोले जड़ के खोल के $बजाय %, या के #लिए उपयोग करते हैं ।
रोमन चेप्लाकाका

@ रोमानचेवलाका किस गोले का? मैंने केवल कभी देखा है $और #...
जोसेफहार्टोट

@ रोमेनशेपकाका मैं निश्चित रूप shसे बैश से पहले अस्तित्व में है (जो बोर्न -फिर शेल के लिए खड़ा है)। लेकिन यह बहुत ही आदिम था और ESCवर्णों की तरह टर्मिनल घटनाओं पर प्रतिक्रिया नहीं देता था । फिर kshआया (बैश से पहले भी), फिर बैश ने उन लोगों द्वारा शुरू किया जो एक बेहतर शेल के विचार से प्यार करते थे, लेकिन ksh से नफरत करते थे। :-)
रामिन

145

sh: http://man.cx/sh
bash : http://man.cx/bash

टीएल; डीआर : एक अधिक सुंदर वाक्य रचना और अधिक कार्यक्षमता bashके shसाथ एक सुपरसेट है । लगभग सभी मामलों में बैश शेबंग लाइन का उपयोग करना सुरक्षित है क्योंकि यह आधुनिक प्लेटफार्मों पर काफी सर्वव्यापी है।

NB: कुछ वातावरणों में, sh है bash । जाँच करें sh --version


31
यदि बैश को श के रूप में आमंत्रित किया जाता है, तो यह थोड़ा अलग व्यवहार करता है। देखें gnu.org/software/bash/manual/bashref.html#Bash-Startup-Files ( "लागू नाम श के साथ") और gnu.org/software/bash/manual/bashref.html#Bash-POSIX-Mode । उदाहरण के लिए, कोई प्रक्रिया प्रतिस्थापन नहीं।
ग्लेन जैकमैन

11
जैसे कि bash sh का सुपरसेट है और कुछ OS जैसे FreeBSD में डिफॉल्ट रूप से bash इंस्टॉल नहीं है, sh में स्क्रिप्टिंग अधिक पोर्टेबिलिटी देगा।
user674062

1
चूंकि किसी विशिष्ट स्क्रिप्ट के लिए POSIX शेल प्राप्त करने के लिए कोई पोर्टेबल स्क्रिप्ट योग्य तरीका नहीं है, पोर्टेबल स्क्रिप्ट बॉर्न शेल सुविधाओं से अधिक नहीं मान सकते हैं।
विद्वान

83

यह प्रश्न अक्सर उन लोगों के लिए एक विहित के रूप में नामांकित किया गया है जो उपयोग करने की कोशिश करते हैं shऔर आश्चर्यचकित हैं कि यह उसी तरह व्यवहार नहीं कर रहा है bash। यहां आम गलतफहमी और नुकसान के बारे में बताया गया है।

सबसे पहले, आपको यह समझना चाहिए कि क्या उम्मीद करनी चाहिए।

  • आप के साथ अपनी स्क्रिप्ट चलाते हैं sh scriptname, या के साथ इसे चलाने scriptnameऔर राशि #!/bin/shमें कुटिया लाइन, आप POSIX की उम्मीद करनी चाहिए shव्यवहार।
  • आप के साथ अपनी स्क्रिप्ट चलाते हैं bash scriptname, या के साथ इसे चलाने scriptnameऔर है #!/bin/bash(या स्थानीय समतुल्य) कुटिया लाइन में, आप बैश व्यवहार की उम्मीद करनी चाहिए।

एक सही शेबंग होने और केवल स्क्रिप्ट नाम टाइप करके स्क्रिप्ट चलाना (संभवतः किसी रिश्तेदार या पूर्ण पथ के साथ ) आम तौर पर पसंदीदा समाधान है। एक सही शेबंग के अलावा, इसके लिए स्क्रिप्ट फ़ाइल को अनुमति ( chmod a+x scriptname) निष्पादित करने की आवश्यकता होती है ।

तो, वे वास्तव में कैसे भिन्न होते हैं?

बैश रेफरेंस मैनुअल में एक खंड है जो मतभेदों को दूर करने का प्रयास करता है लेकिन भ्रम के कुछ सामान्य स्रोतों में शामिल हैं

  • [[में उपलब्ध नहीं है sh(केवल [जो अधिक क्लंकी और सीमित है)।
  • sh सरणियाँ नहीं है।
  • कुछ बैश कीवर्ड को local, source, function, shopt, let, declare, और selectकरने के लिए पोर्टेबल नहीं हैं sh। (कुछ shकार्यान्वयन जैसे समर्थन करते हैं local।)
  • बैश में कई सी-स्टाइल सिंटैक्स एक्सटेंशन हैं जैसे तीन-तर्क for((i=0;i<=3;i++))लूप, +=इंक्रीमेंट असाइनमेंट, आदि $'string\nwith\tC\aescapes'सुविधा को POSIX के लिए अस्थायी रूप से स्वीकार किया जाता है (इसका अर्थ है कि यह अब बैश में काम करता है, लेकिन अभी तक shसिस्टम द्वारा समर्थित नहीं होगा जो केवल वर्तमान का पालन करते हैं। POSIX विनिर्देश, और संभावना आने वाले कुछ समय के लिए नहीं होगी)।
  • बैश सपोर्ट करता है <<<'here strings'
  • बैश है *.{png,jpg}और {0..12}ब्रेस विस्तार।
  • ~$HOMEकेवल बाश में संदर्भित करता है (और आम तौर ~usernameपर घर की निर्देशिका में username)।यह POSIX में है, लेकिन कुछ पूर्व POSIX /bin/shकार्यान्वयन से गायब हो सकता है ।
  • बैश के साथ प्रक्रिया प्रतिस्थापन है <(cmd)और >(cmd)
  • बैश के लिए Csh- शैली की सुविधा पुनर्निर्देशन उपनाम की तरह &|है 2>&1 |और इसके &>लिए है> ... 2>&1
  • बैश <>पुनर्निर्देशन के साथ सहकर्मियों का समर्थन करता है ।
  • बैश जैसे विस्तार अमानक पैरामीटर विस्तार का विस्तृत समूह की सुविधा है ${substring:1:2}, ${variable/pattern/replacement}, केस परिवर्तन, आदि
  • बैश ने शेल अंकगणित (हालांकि अभी भी फ्लोटिंग-पॉइंट समर्थन नहीं है) के लिए काफी विस्तारित सुविधाओं की है। एक अप्रचलित विरासत $[expression]सिंटैक्स है जिसे हालांकि POSIX अंकगणितीय $((expression))सिंटैक्स से बदला जाना चाहिए । (कुछ विरासत पूर्व POSIX shकार्यान्वयन का समर्थन नहीं कर सकते हैं, हालांकि।)
  • जादू चर की तरह $RANDOM, $SECONDS, $PIPESTATUS[@]और $FUNCNAMEबैश विस्तार है।
  • सिंथेटिक अंतर जैसे कि export variable=valueऔर [ "x" == "y" ]जो पोर्टेबल नहीं हैं ( export variableचर असाइनमेंट से अलग होना चाहिए, और [ ... ]एक सिंगल सिग्नल का उपयोग करते हुए पोर्टेबल स्ट्रिंग तुलना )।
  • कई, वैकल्पिक व्यवहार को सक्षम या अक्षम करने के लिए कई बैश-केवल एक्सटेंशन, शेल की आंतरिक स्थिति को उजागर करते हैं।
  • कई, इंटरैक्टिव उपयोग के लिए कई सुविधा सुविधाएँ जो हालांकि स्क्रिप्ट व्यवहार को प्रभावित नहीं करती हैं।

याद रखें, यह एक संक्षिप्त सूची है। पूर्ण स्कूप के लिए संदर्भ मैनुअल का संदर्भ लें, और कई अच्छे वर्कअराउंड के लिए http://mywiki.wooledge.org/Bashism ; और / या http://shellcheck.net/ जो कई बैश-केवल सुविधाओं के लिए चेतावनी देता है।

एक सामान्य त्रुटि के लिए एक #!/bin/bashशेबंग लाइन है, लेकिन फिर भी sh scriptnameवास्तव में स्क्रिप्ट को चलाने के लिए उपयोग करना। यह मूल रूप से किसी भी बैश-केवल कार्यक्षमता को अक्षम करता है, इसलिए आपको सरणियों का उपयोग करने की कोशिश करने के लिए सिंटैक्स त्रुटियां मिलती हैं। (शेबबैंग लाइन वाक्यात्मक रूप से एक टिप्पणी है, इसलिए इसे बस इस परिदृश्य में अनदेखा किया जाता है।)

दुर्भाग्य से, बैश को चेतावनी नहीं दी जाएगी जब आप इन निर्माणों का उपयोग करने की कोशिश करेंगे जब इसे लागू किया जाएगा sh। यह पूरी तरह से सभी बैश-केवल कार्यक्षमता को अक्षम नहीं करता है , या तो इसे चलाने के रूप में बैश को चलाने के रूप shमें यह जांचने का एक अच्छा तरीका नहीं है कि आपकी स्क्रिप्ट ठीक से पोर्टेबल है ash/ dash/ POSIX shया वारिसलूम जैसे वेरिएंटsh


2
मौलिक रूप से, टीएल; डीआर ersion यह उत्तर है
त्रिप्ली

4
shellcheck.net मुझे सब चाहिए था। बहुत धन्यवाद।
जोश हबदास

Fwiw, export variable=value POSIX: pubs.opengroup.org/onlinepubs/009695399/utilities/export.html द्वारा अनिवार्य है । शायद यह कुछ प्राचीन गोले में उपलब्ध नहीं है, लेकिन यह निश्चित रूप से नहीं है।
रोमन चेप्लाकाका

53

शेल एक उपयोगकर्ता और ओएस के बीच एक ऑपरेटिंग सिस्टम की सेवाओं तक पहुंचने के लिए एक इंटरफ़ेस है। यह GUI या CLI (कमांड लाइन इंटरफेस) हो सकता है।

sh (Bourne sh ell) Unix / Unix जैसे ऑपरेटिंग सिस्टम के लिए एक शेल कमांड-लाइन दुभाषिया है। यह कुछ अंतर्निहित कमांड प्रदान करता है। स्क्रिप्टिंग भाषा में हम दुभाषिया के रूप में निरूपित करते हैं #!/bin/sh। यह बैश (फ्री / ओपन), काश (फ्री नहीं) जैसे अन्य शेल द्वारा व्यापक रूप से समर्थित था।

बैश ( बी आइन गेन एस हेल) बॉर्न शेल के लिए एक शेल रिप्लेसमेंट है। बैश श का सुपरसेट है। बैश श का समर्थन करता है। POSIX मानकों का एक सेट है जो यह परिभाषित करता है कि POSIX-compliant सिस्टम को कैसे काम करना चाहिए। बैश वास्तव में POSIX अनुरूप शेल नहीं है। एक स्क्रिप्टिंग भाषा में हम दुभाषिया के रूप में दर्शाते हैं #!/bin/bash

सादृश्य:

  • शेल एक इंटरफेस या विनिर्देशों या एपीआई की तरह है।
  • श एक ऐसा वर्ग है जो शेल इंटरफ़ेस को लागू करता है।
  • बैश श का एक उपवर्ग है।

यहां छवि विवरण दर्ज करें


3
मुझे नहीं मिला। आपने दोनों का उल्लेख किया है "बैश सुपर केसेट है" और "बैश द श का उपवर्ग है", क्या वे विपरीत कथन नहीं हैं? क्या आप स्पष्ट कर सकते हैं?
कीर्तन प्रभाकरन

11
मुझे लगता है कि यह कहने की कोशिश कर रहा है कि बैश को विरासत में मिला है sh(इसलिए यह ओओपी अर्थों में एक "उपवर्ग" है) और इसे विस्तारित करता है (इसलिए कार्यक्षमता का एक सुपरसेट है)।
ट्रिपलआई

52

से पोस्ट करें UNIX.COM

शैल सुविधाएँ

नीचे दी गई यह तालिका उन सभी विशेषताओं को सूचीबद्ध करती है, जो मुझे लगता है कि आप दूसरे पर एक खोल का चयन करेंगे। यह एक निश्चित सूची होने का इरादा नहीं है और इसमें हर एक संभव शेल के लिए हर संभव सुविधा शामिल नहीं है। एक सुविधा को केवल शेल में माना जाता है यदि संस्करण में जो ऑपरेटिंग सिस्टम के साथ आता है, या यदि यह मानक वितरण से सीधे संकलित के रूप में उपलब्ध है। विशेष रूप से नीचे निर्दिष्ट सी शेल SUNOS 4 पर उपलब्ध है। *, विक्रेताओं की एक बड़ी संख्या अब या तो tcsh या अपने स्वयं के संवर्धित C शेल को शिप करती है (वे हमेशा स्पष्ट नहीं करते हैं कि वे tcsh शिपिंग हैं।

कोड:

                                     sh   csh  ksh  bash tcsh zsh  rc   es
Job control                          N    Y    Y    Y    Y    Y    N    N
Aliases                              N    Y    Y    Y    Y    Y    N    N
Shell functions                      Y(1) N    Y    Y    N    Y    Y    Y
"Sensible" Input/Output redirection  Y    N    Y    Y    N    Y    Y    Y
Directory stack                      N    Y    Y    Y    Y    Y    F    F
Command history                      N    Y    Y    Y    Y    Y    L    L
Command line editing                 N    N    Y    Y    Y    Y    L    L
Vi Command line editing              N    N    Y    Y    Y(3) Y    L    L
Emacs Command line editing           N    N    Y    Y    Y    Y    L    L
Rebindable Command line editing      N    N    N    Y    Y    Y    L    L
User name look up                    N    Y    Y    Y    Y    Y    L    L
Login/Logout watching                N    N    N    N    Y    Y    F    F
Filename completion                  N    Y(1) Y    Y    Y    Y    L    L
Username completion                  N    Y(2) Y    Y    Y    Y    L    L
Hostname completion                  N    Y(2) Y    Y    Y    Y    L    L
History completion                   N    N    N    Y    Y    Y    L    L
Fully programmable Completion        N    N    N    N    Y    Y    N    N
Mh Mailbox completion                N    N    N    N(4) N(6) N(6) N    N
Co Processes                         N    N    Y    N    N    Y    N    N
Builtin artithmetic evaluation       N    Y    Y    Y    Y    Y    N    N
Can follow symbolic links invisibly  N    N    Y    Y    Y    Y    N    N
Periodic command execution           N    N    N    N    Y    Y    N    N
Custom Prompt (easily)               N    N    Y    Y    Y    Y    Y    Y
Sun Keyboard Hack                    N    N    N    N    N    Y    N    N
Spelling Correction                  N    N    N    N    Y    Y    N    N
Process Substitution                 N    N    N    Y(2) N    Y    Y    Y
Underlying Syntax                    sh   csh  sh   sh   csh  sh   rc   rc
Freely Available                     N    N    N(5) Y    Y    Y    Y    Y
Checks Mailbox                       N    Y    Y    Y    Y    Y    F    F
Tty Sanity Checking                  N    N    N    N    Y    Y    N    N
Can cope with large argument lists   Y    N    Y    Y    Y    Y    Y    Y
Has non-interactive startup file     N    Y    Y(7) Y(7) Y    Y    N    N
Has non-login startup file           N    Y    Y(7) Y    Y    Y    N    N
Can avoid user startup files         N    Y    N    Y    N    Y    Y    Y
Can specify startup file             N    N    Y    Y    N    N    N    N
Low level command redefinition       N    N    N    N    N    N    N    Y
Has anonymous functions              N    N    N    N    N    N    Y    Y
List Variables                       N    Y    Y    N    Y    Y    Y    Y
Full signal trap handling            Y    N    Y    Y    N    Y    Y    Y
File no clobber ability              N    Y    Y    Y    Y    Y    N    F
Local variables                      N    N    Y    Y    N    Y    Y    Y
Lexically scoped variables           N    N    N    N    N    N    N    Y
Exceptions                           N    N    N    N    N    N    N    Y

ऊपर की मेज की चाबी।

इस शेल का उपयोग करके वाई फीचर किया जा सकता है।

N फ़ीचर शेल में मौजूद नहीं है।

एफ फ़ीचर केवल शेल फ़ंक्शन तंत्र का उपयोग करके किया जा सकता है।

L इस सुविधा को सक्षम करने के लिए रीडलाइन लाइब्रेरी को शेल में जोड़ा जाना चाहिए।

ऊपर तालिका में नोट्स

1. This feature was not in the original version, but has since become
   almost standard.
2. This feature is fairly new and so is often not found on many
   versions of the shell, it is gradually making its way into
   standard distribution.
3. The Vi emulation of this shell is thought by many to be
   incomplete.
4. This feature is not standard but unofficial patches exist to
   perform this.
5. A version called 'pdksh' is freely available, but does not have
   the full functionality of the AT&T version.
6. This can be done via the shells programmable completion mechanism.
7. Only by specifying a file via the ENV environment variable.

आपकी तालिका मेरे लिए उपयोगी नहीं है क्योंकि यह 1988 से पहले बॉर्न शेल की सुविधाओं और ksh से सुविधाओं की तुलना करने की कोशिश करता है। यदि आप वास्तव में 1988 के लिए एक तालिका बनाते हैं, तो आपको उस तालिका से अधिकांश अन्य गोले निकालने की आवश्यकता होगी - बैश सहित , श और आर सी। क्या आप बता सकते हैं कि यो को आपकी तालिका के लिए मान कहाँ से मिला?
स्किल्ली

1
मुझे कुछ संकेत दें: जॉब कंट्रोल को 1989 में बॉर्न शेल में जोड़ा गया था और 2005 में बॉर्न शेल को ओपनसोर्स बनाया गया था। कोर्न शेल में कम से कम 1988 से प्रतिस्थापन है और यह 1997 से ओपनसोर्स है। BTW: $ ENV के बारे में उनके कथन सही नहीं हैं, $ ENV केवल इंटरैक्टिव गोले के लिए पढ़ा / निष्पादित किया जाता है।
शास्त्री


@ यदि आपको लगता है कि यह कहीं भी गलत है, तो कृपया इसे उचित रूप से संपादित करने के लिए स्वतंत्र महसूस करें।
सीनिवी

8
विद्वानों ने जो बताया, उसके आधार पर यह प्रतीत होता है कि इस उत्तर को हटाना बेहतर होगा, क्योंकि यह अनिवार्य रूप से धोखाधड़ी है, और ओपी ने वास्तव में अपने द्वारा चिपकाई गई जानकारी को वेट नहीं किया।
डैनो

24

टर्मिनल

  • प्रोग्राम (ओं) जो एक खिड़की डाल दिया
  • xterm, rxvt, konsole, kvt, gnome-terminal, nxterm, और eterm।

शेल

  • एक प्रोग्राम है जो टर्मिनल में चलता है
  • शेल एक कमांड दुभाषिया और एक प्रोग्रामिंग भाषा दोनों है
  • शेल बस एक मैक्रो प्रोसेसर है जो कमांड निष्पादित करता है।
  • मैक्रो प्रोसेसर का मतलब कार्यक्षमता है जहां पाठ और प्रतीकों को बड़ा भाव बनाने के लिए विस्तारित किया जाता है।

एसएच बनाम दे घुमा के

एसएच

  • (शेल)
  • एक विशिष्ट खोल है
  • एक कमांड दुभाषिया और एक प्रोग्रामिंग भाषा
  • BASH के पूर्ववर्ती

दे घुमा के

  • (बोर्न अगेन शैल)
  • एक विशिष्ट खोल है
  • एक कमांड दुभाषिया और एक प्रोग्रामिंग भाषा
  • श कार्यक्षमता और अधिक है
  • एसएच के उत्तराधिकारी
  • BASH डिफ़ॉल्ट शेल है

संदर्भ सामग्री:

शेल gnu.org:

इसके आधार पर, एक शेल केवल एक मैक्रो प्रोसेसर है जो कमांड निष्पादित करता है। मैक्रो प्रोसेसर शब्द का अर्थ कार्यक्षमता है जहां पाठ और प्रतीकों को बड़ा भाव बनाने के लिए विस्तारित किया जाता है।

यूनिक्स खोल एक कमांड दुभाषिया और एक प्रोग्रामिंग भाषा दोनों है। एक कमांड दुभाषिया के रूप में, शेल जीएनयू उपयोगिताओं के समृद्ध सेट के लिए उपयोगकर्ता इंटरफ़ेस प्रदान करता है। प्रोग्रामिंग भाषा की विशेषताएं इन उपयोगिताओं को संयोजित करने की अनुमति देती हैं। कमांड वाली फाइलें बनाई जा सकती हैं, और खुद कमांड बन सकती हैं। इन नए आदेशों में निर्देशिका / बिन जैसी सिस्टम कमांड जैसी ही स्थिति होती है, जिससे उपयोगकर्ता या समूह अपने सामान्य कार्यों को स्वचालित करने के लिए कस्टम वातावरण स्थापित कर सकते हैं।

गोले का उपयोग अंतःक्रियात्मक या गैर-अंतःक्रियात्मक रूप से किया जा सकता है। इंटरैक्टिव मोड में, वे कीबोर्ड से टाइप किए गए इनपुट को स्वीकार करते हैं। गैर-अंतःक्रियात्मक रूप से निष्पादित करते समय, शेल एक फ़ाइल से पढ़े गए कमांड को निष्पादित करते हैं।

एक शैल जीएनयू कमांड के निष्पादन की अनुमति देता है, दोनों तुल्यकालिक और अतुल्यकालिक रूप से। शेल अधिक इनपुट को स्वीकार करने से पहले सिंक्रोनस कमांड के पूरा होने की प्रतीक्षा करता है; अतुल्यकालिक कमांड शेल के साथ समानांतर में निष्पादित करना जारी रखता है जबकि यह अतिरिक्त कमांड को पढ़ता है और निष्पादित करता है। पुनर्निर्देशन उन आदेशों के इनपुट और आउटपुट के ठीक-ठीक नियंत्रण की अनुमति देता है। इसके अलावा, शेल कमांड के वातावरण की सामग्री पर नियंत्रण की अनुमति देता है।

शेल अलग-अलग उपयोगिताओं के माध्यम से प्राप्त करने के लिए असंभव या असुविधाजनक कार्यशीलता को लागू करने वाले अंतर्निहित आदेशों (अंतर्निहित) का एक छोटा सा सेट भी प्रदान करते हैंउदाहरण के लिए, cd, break, जारी रखना, और निष्पादित करना शेल के बाहर लागू नहीं किया जा सकता क्योंकि वे सीधे शेल को ही हेरफेर करते हैं। अन्य लोगों के बीच इतिहास, गेटअप्स, किल, या पीडब्ल्यूडी बिल्डरों को अलग-अलग उपयोगिताओं में लागू किया जा सकता है, लेकिन वे बिलिन कमांड के रूप में उपयोग करने के लिए अधिक सुविधाजनक हैं। शेल के सभी निर्माण बाद के खंडों में वर्णित हैं।

आदेशों को निष्पादित करते समय आवश्यक है, गोले की अधिकांश शक्ति (और जटिलता) उनकी एम्बेडेड प्रोग्रामिंग भाषाओं के कारण है। किसी भी उच्च-स्तरीय भाषा की तरह, शेल वेरिएबल्स, फ्लो कंट्रोल कंस्ट्रक्शन, कोटिंग और फंक्शन प्रदान करता है।

शैलियाँ प्रोग्रामिंग भाषा को बढ़ाने के बजाय विशेष रूप से संवादात्मक उपयोग के लिए तैयार की जाती हैं। इन इंटरैक्टिव विशेषताओं में नौकरी नियंत्रण, कमांड लाइन संपादन, कमांड इतिहास और उपनाम शामिल हैं। इन सुविधाओं में से प्रत्येक इस मैनुअल में वर्णित है।

BASH gnu.org:

GNU ऑपरेटिंग सिस्टम के लिए बैश शेल, या कमांड भाषा दुभाषिया है। यह नाम 'बॉर्न-अगेन शॉल' के लिए एक संक्षिप्त नाम है, जो स्टीफन बॉर्न पर एक वाक्य है, जो वर्तमान यूनिक्स शेल श के प्रत्यक्ष पूर्वज के लेखक हैं, जो यूनिक्स के सातवें संस्करण बेल लैब्स रिसर्च संस्करण में दिखाई दिए थे।

बैश काफी हद तक श के साथ संगत है और कोर्न शेल क्श और सी शेल csh से उपयोगी सुविधाओं को शामिल करता है। यह IEEE POSIX विनिर्देश और IEEE POSIX विनिर्देश (IEEE मानक 1003.1) के उपकरण भाग का एक अनुरूप कार्यान्वयन करने का इरादा है। यह इंटरैक्टिव और प्रोग्रामिंग उपयोग दोनों के लिए श के ऊपर कार्यात्मक सुधार प्रदान करता है।

जबकि GNU ऑपरेटिंग सिस्टम csh के एक संस्करण सहित अन्य गोले प्रदान करता है, बैश डिफ़ॉल्ट शेल है । अन्य जीएनयू सॉफ्टवेयर की तरह, बैश काफी पोर्टेबल है। यह वर्तमान में यूनिक्स के लगभग हर संस्करण और कुछ अन्य ऑपरेटिंग सिस्टमों पर चलता है - एमएस-डॉस, ओएस / 2 और विंडोज प्लेटफार्मों के लिए स्वतंत्र रूप से समर्थित पोर्ट मौजूद हैं।


14

अन्य जवाबों में आमतौर पर बैश और पोसिक्स शेल मानक के बीच अंतर बताया गया है। हालाँकि, जब पोर्टेबल शेल स्क्रिप्ट लिखते हैं और बैश सिंटैक्स के लिए उपयोग किया जाता है, तो विशिष्ट बैशिज़्म और संबंधित शुद्ध पॉसिक्स समाधानों की एक सूची बहुत आसान है। ऐसी सूची संकलित की गई है जब उबंटू ने बश से डैश को डिफ़ॉल्ट सिस्टम शेल के रूप में स्विच किया और यहां पाया जा सकता है: https://wiki.ubuntu.com/DashAsBinSh

इसके अलावा, एक बढ़िया टूल है, जिसे चेकबेशिज्म कहा जाता है, जो आपकी स्क्रिप्ट में बैशीज़ की जाँच करता है और जब आप यह सुनिश्चित करना चाहते हैं कि आपकी स्क्रिप्ट पोर्टेबल है, तो काम आता है।


यह मूल रूप से मेरा जवाब है जो अभी-अभी सच में उबलता है। +1
ट्रिपलए

7

वे लगभग समान हैं, लेकिन bashअधिक विशेषताएं हैं - sh(अधिक या कम) का एक पुराना सबसेट है bash

shअक्सर मूल का मतलब होता है Bourne shell, जो पूर्ववर्ती bash( Bourne *again* shell), और 1977 में बनाया गया था। लेकिन, व्यवहार में, 1992 के POSIX मानक के साथ इसे अत्यधिक-क्रॉस-संगत शेल अनुपालन के रूप में सोचना बेहतर हो सकता है।

शेल के साथ शुरू #!/bin/shया उपयोग करने वाले लिपियों का उपयोग shआमतौर पर पीछे की संगतता के लिए किया जाता है। किसी भी यूनिक्स / लिनक्स ओएस में एक shशेल होगा। उबंटू में shअक्सर इनवॉइस dashऔर MacOS पर यह एक विशेष POSIX संस्करण है bash। ये गोले मानक-अनुरूप व्यवहार, गति या पीछे की संगतता के लिए पसंद किए जा सकते हैं।

bashमूल से नया है sh, अधिक सुविधाएँ जोड़ता है, और पीछे की ओर संगत होना चाहता है sh। सिद्धांत रूप में, shकार्यक्रमों को चलाना चाहिए bashbashलगभग सभी लिनक्स / यूनिक्स मशीनों पर उपलब्ध है और आमतौर पर डिफ़ॉल्ट रूप से उपयोग किया जाता है - zshकैटालिना (10.15) के रूप में मैकओएस डिफ़ॉल्ट के उल्लेखनीय अपवाद के साथ । FreeBSD, डिफ़ॉल्ट रूप से, bashस्थापित के साथ नहीं आता है।


shदूर POSIX से पहले है। इन दिनों, आप उम्मीद करेंगे कि आपको जो भी shमिल जाए वह कम से कम POSIX- संगत हो; लेकिन विरासत प्रणालियों पर यह किसी भी तरह से नहीं दिया जाता है। POSIX खोल की तुलना में कहीं अधिक stadardizes; वास्तव में, आप तर्क दे सकते हैं कि ऑपरेटिंग सिस्टम कॉल और लाइब्रेरी फ़ंक्शन का मानकीकरण अधिक महत्वपूर्ण है।
ट्रिपलए

मैंने इसे कम भ्रामक बनाने के लिए POSIX के बारे में सामान हटा दिया
रयान टेलर

3

/bin/shके रूप में एक ही कार्यक्रम को लागू या नहीं कर सकते हैं /bin/bash

shPOSIX द्वारा आवश्यक कम से कम सुविधाओं का समर्थन करता है (एक सही कार्यान्वयन मानते हुए)। यह एक्सटेंशन का भी समर्थन कर सकता है।

bash, "बॉर्न अगेन शेल", श प्लस बैश-विशिष्ट एक्सटेंशन के लिए आवश्यक सुविधाओं को लागू करता है। एक्सटेंशन का पूरा सेट यहाँ वर्णन करने के लिए बहुत लंबा है, और यह नई रिलीज़ के साथ बदलता रहता है। मतभेदों को बाश मैनुअल में प्रलेखित किया गया है। टाइप करें info bashऔर "बैश फीचर्स" सेक्शन (करेंट वर्जन में सेक्शन 6) पढ़ें या ऑनलाइन डॉक्यूमेंटेशन को पढ़ें ।


shयदि आप PATHअपने वर्तमान शेल में सही सेट अप करते हैं, तो केवल आपको एक पॉसिक्स शेल देता है । कोई परिभाषित पेट-नाम नहीं है जो आपको एक पॉसिक्स खोल देता है।
विद्वान

लंबे समय के लिए, उदाहरण के लिए, सोलारिस पर आपको shआवश्यक रूप से एक पोसिक्स शेल भी नहीं दिया गया था ।
ट्रिपलए

3

बैश और श दो अलग-अलग गोले हैं। मूल रूप से बैश sh है, जिसमें अधिक विशेषताएं और बेहतर सिंटैक्स हैं। अधिकांश कमांड एक ही काम करते हैं, लेकिन वे अलग-अलग होते हैं। बैश (बैश) कई उपलब्ध (अभी तक आमतौर पर इस्तेमाल किए जाने वाले) अनपढ़ गोले में से एक है। बैश "बॉर्न अगेन शॉल" के लिए खड़ा है, और मूल बॉर्न शेल (श) का प्रतिस्थापन / सुधार है।

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

यह कहने के बाद, आपको पता होना चाहिए कि अधिकांश प्रणालियों पर बिन / श का प्रतीकात्मक लिंक होगा और श को आह्वान नहीं करेगा। उबंटू / बिन / श में इस्तेमाल किया जाता है जो कि बैश से जुड़ने के लिए इस्तेमाल किया जाता है, लिनक्स वितरण पर विशिष्ट व्यवहार, लेकिन अब डैश नामक एक अन्य शेल से लिंकिंग में बदल गया है। मैं बैश का उपयोग करता हूं, क्योंकि यह मेरे अनुभव से बहुत मानक (या कम से कम सबसे आम) है। वास्तव में, समस्याएं तब पैदा होती हैं जब एक बैश स्क्रिप्ट #! / Bin / sh का उपयोग करेगी क्योंकि स्क्रिप्ट बनाने वाला मानता है कि लिंक को बैश करना है जब उसे होना नहीं है।


0

जितना संभव हो उतना अंतर: एक बुनियादी समझ होने के बाद, ऊपर पोस्ट की गई अन्य टिप्पणियों को पकड़ना आसान होगा।

शेल - "शेल" एक प्रोग्राम है, जो उपयोगकर्ता और ऑपरेटिंग सिस्टम (कर्नेल) के बीच बातचीत को सुविधाजनक बनाता है। कई शेल कार्यान्वयन उपलब्ध हैं, जैसे sh, bash, csh, zsh ... आदि।

शेल कार्यक्रमों में से किसी का उपयोग करके, हम उन शेल प्रोग्राम द्वारा समर्थित कमांड को निष्पादित करने में सक्षम होंगे।

बैश - यह बी आर्न से प्राप्त होता है- एक लाभ एल । इस कार्यक्रम का उपयोग करके, हम शेल द्वारा निर्दिष्ट सभी आदेशों को निष्पादित करने में सक्षम होंगे। साथ ही, हम कुछ कमांड्स को निष्पादित करने में सक्षम होंगे जो विशेष रूप से इस प्रोग्राम में जोड़े जाते हैं। श के साथ बैश की पिछड़ी संगतता है।

Sh - यह बॉर्न Sh ell से निकला है। "sh" शेल में निर्दिष्ट सभी कमांड का समर्थन करता है। मील्स, इस कार्यक्रम का उपयोग करके, हम शेल द्वारा निर्दिष्ट सभी कमांड को निष्पादित करने में सक्षम होंगे।

अधिक जानकारी के लिए, करें: - https://man.cx/sh - https://man.cx/bash


POSIX को समझने के लिए, एलेक्स से प्रतिक्रिया पढ़ें कृपया जाँच करें: stackoverflow.com/a/1780614/1261003
Raihanhbh

मैं POSIX को समझने की कोशिश नहीं कर रहा हूँ। मैं आपके उत्तर की समीक्षा कर रहा हूं और जैसे मुझे यह देखने की आवश्यकता है कि आपका उत्तर मूल्य जोड़ता है। मुझे नहीं लगता कि यह करता है।
स्कॉरटे

मेरा मानना ​​है कि इन छोटे स्पष्टीकरणों से नौसिखियों को उपरोक्त चर्चाओं में प्रयुक्त शब्दजाल को और अधिक आराम से समझने में मदद मिलेगी। @ शरत
Raihanhbh

-1

लिनक्स ऑपरेटिंग सिस्टम विभिन्न प्रकार के शेल प्रदान करता है। हालांकि गोले में कई कमांड होते हैं, प्रत्येक प्रकार की अनूठी विशेषताएं होती हैं। आइए विभिन्न प्रकार के अधिकतर उपयोग किए गए गोले का अध्ययन करें।

शेल

श शेल को बॉर्न शेल के नाम से भी जाना जाता है। Sh खोल 1977 में AT & T के बेल लैब्स में स्टीफन बॉर्न द्वारा यूनिक्स कंप्यूटरों के लिए विकसित किया गया पहला शेल है। इसमें कई स्क्रिप्टिंग टूल शामिल हैं।

बैश शेल:

बैश शेल बोर्न अगेन शेल के लिए है। बैश शेल अधिकांश लिनक्स वितरण में डिफ़ॉल्ट शेल है और श शेल के लिए स्थानापन्न (शश बैश शेल में भी चलेगा)। बैश शैल बिना संशोधन के शेल शेल के विशाल बहुमत को निष्पादित कर सकता है और कमांड लाइन संपादन सुविधा भी प्रदान कर सकता है।


केन थॉम्पसन द्वारा पहले का एक खोल था। बॉर्न शेल को आधिकारिक तौर पर v7 यूनिक्स (1979) में पेश किया गया था।
ट्रिपल डे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.