कोई भी सच्चे बॉर्न शेल को / बिन / श के रूप में उपयोग क्यों नहीं करता है?


55

मैंने देखा है कि मूल रूप से मैंने कभी भी जिस प्रणाली के साथ काम किया है /bin/shवह वास्तविक निष्पादन योग्य नहीं है। यह हमेशा के लिए एक सिमलिंक है dash, bashPOSIX मोड, या ऐसा ही कुछ में।

क्यों? असली, मूल का उपयोग करने के नुकसान क्या हैं /bin/sh? (स्पीड? लाइसेंसिंग)


3
आपने केवल लिनक्स का उपयोग किया है, है ना? मैंने केवल लिनक्स पर "sh as symlink" देखा है।
ग्रेग हेवगिल

@GregHewgill सोलारिस के हाल के संस्करणों के लिए shसहानुभूति नहीं है ksh?
गिल्स एसओ- बुराई को रोकना '

1
@ जवाब में से एक के अनुसार, हाँ, सोलारिस 11 के बाद से ksh

1
@GregHewgill मैंने डार्विन का भी उपयोग किया है, जिसके लिए इसे bashIIRC के सहारे रखा गया है ।
1917

6
आपको मूल / बिन / श से क्या मतलब है ? यूनिक्स V1 से थॉमसन शेल? यूनिक्स वी 7 से बॉर्न शेल का कोई कार्य नहीं था, जिसमें कोई टिप्पणी नहीं थी ...? SysIII, SysV, Solaris, HP / UX में से एक, BSD पर राख का पुन: कार्यान्वयन? आजकल shएक मानक पर आधारित है जिसका अर्थ है कि हमारे पास कई कार्यान्वयन हो सकते हैं जो स्पष्ट निर्दिष्ट तरीके से व्यवहार करेंगे जब तक आप अपनी स्क्रिप्ट में मानक वाक्यविन्यास का उपयोग करते हैं।
स्टीफन चेज़लस

जवाबों:


38

मुझे सुविधाओं की कमी का अनुमान है - कोई कमांड इतिहास, कोई फैंसी पुनर्निर्देशन, कोई कमांड लाइन संपादन नहीं। बीएसडी ने cshउन कारणों के लिए सी शेल पेश किया। एक और पहलू यह है कि जेनुइन बॉर्न शेल केवल हाल ही में खुले स्रोत के रूप में उपलब्ध था । जब तक आप इसे लाइसेंस नहीं देते, आप इसे वितरित नहीं कर सकते। इसने इसे फ्री-ऑफ-कॉस्ट डिस्ट्रोस के लिए पहुंच से बाहर कर दिया, और इसे अन्य डिस्ट्रो, और * बीएसडी के लिए वैचारिक रूप से अप्राप्य बना दिया।

लेकिन कोड अब उपलब्ध है। आप एक नज़र डाल सकते हैं, इसे संकलित कर सकते हैं, इसे एक स्पिन दे सकते हैं।


50
और फिर तुरंत जो भी आप पहले उपयोग कर रहे थे, उसे वापस स्विच करें।
इग्नासियो वाज़केज़-अब्राम्स

24
@strugee "" सुविधाओं की कमी "- यह एक समस्या क्यों होगी?" हाँ, अच्छी बात है ... प्रोग्रामर असेंबली / सी / उच्च स्तरीय भाषाओं जैसी बेकार चीजों का उपयोग क्यों करते हैं जब आप उनके साथ कुछ भी कर सकते हैं तो आप पहले से ही लिख सकते हैं। मशीन भाषा सीधे? तथ्य यह है: सुविधाओं = विकास की गति में वृद्धि + रखरखाव में वृद्धि = कम लागत = बेहतर उपयोग करना shबिल्कुल वैसा है जैसा bashकि इसके अलावा उपयोग करना है: धीमा, कार्यक्रम लंबा है और इसे बनाए रखना कठिन है।
बकुरीउ

10
यह वास्तव में सुविधाओं की कमी नहीं है, लेकिन तथ्य यह है कि POSIX shएक POSIX आज्ञाकारी खोल को चलाने के लिए कमांड को अनिवार्य करता है , जो विरासत बोर्न शेल नहीं है। जबकि POSIX shमें होने की आवश्यकता नहीं है /bin/sh, यह होने के लिए सबसे तार्किक निर्देशिका है।
बजे

4
@ बकुरी कमांड हिस्ट्री और कमांड लाइन एडिटिंग दोनों ऐसी चीजें हैं जिनकी आपको स्क्रिप्ट की जरूरत नहीं होगी।
स्ट्रूजी

4
@strugee वे केवल अंतर नहीं हैं । उदाहरण के लिए shटिल्ड और ब्रेस विस्तार नहीं है, कुछ का निर्माण-इन (जैसे याद कर रहे हैं pushdऔर popd, select) कोई गणित विस्तार। बहुत सारे चर गायब हैं, उदाहरण के लिए PIPESTATUS
बाकुरू

23

आपके प्रश्न का कथन गलत है। संस्करण 10 तक सोलारिस है के रूप में विरासत सच बॉर्न शैल उपलब्ध कराने के /bin/sh। यह पुरानी स्क्रिप्ट के साथ संगतता को तोड़ने के लिए नहीं किया गया था जो एक अलग शेल के साथ विफल हो सकता है। यह विकल्प हालांकि बहुत निराशाजनक था।

अधिकांश अगर सभी यूनिक्स और यूनिक्स की तरह शेष नहीं हैं, तो सोलारिस 11 सहित, एक POSIX संगत शेल प्रदान करता है /bin/shक्योंकि POSIX shएक POSIX शेल लॉन्च करने का आदेश देता है, न कि विरासत बॉर्न शेल जो आज्ञाकारी नहीं है। /bin/shआम तौर पर :

  • ksh88या ksh93वाणिज्यिक यूनिक्स कार्यान्वयन पर
  • एक संशोधित bashपर OS/X(हालांकि यह हुआ करता था zsh)
  • एक ashया pdkshदूसरे पर व्युत्पन्नBSDs
  • bashया dashगन्नू / लिनक्स वितरण पर।

यह आवश्यक रूप से एक कड़ी नहीं है, बल्कि कई प्रणालियों पर एक वास्तविक निष्पादन योग्य हो सकता है लेकिन Gnu / Linuxes।

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

यह एक तथ्य यह भी है कि कुछ गोले, विशेष रूप से bash, कॉल किए जाने पर अलग तरह से व्यवहार करते हैं sh, और यह ज्यादातर शेल से सुविधाओं को निकालता है, न कि दूसरे तरीके से।


16

जहां तक ​​मुझे पता है कि मूल बॉर्न शेल बीएसडी और जीएनयू परियोजना द्वारा उपयोग नहीं किया जा सकता था, क्योंकि इसका लाइसेंस है।

इसके बाद मूल यूनिक्स के पास कोई लाइसेंस नहीं था और जीएनयू परियोजना को जीपीएल के तहत एक शेल की आवश्यकता थी, इसलिए उन्होंने बैश का उपयोग किया।

यही बात BSD4 के लिए सभी BSD के माता-पिता के लिए सही है। एटी एंड टी के मुकदमे के लिए धन्यवाद कि उन्हें बोर्न शेल सहित मूल यूनिक्स से सभी स्रोत को फिर से लिखना पड़ा।

पारंपरिक बीएसडी लाइन में, बॉर्न शेल को 4.3BSD-Reno (लेकिन अब नेट / 2 और अगले 4.4BSDs के साथ नहीं) तक भेज दिया गया था। लाइसेंस कारणों के लिए तब इसे केनेथ अल्मक्विस्ट (जिसे अक्सर ऐश कहा जाता है) द्वारा बोर्न-संगत, svr4- जैसे श के साथ प्रतिस्थापित किया गया था।

FreeBSDs से man sh

एक श कमांड, थॉम्पसन शेल, संस्करण 1 एटी एंड टी यूनिक्स में दिखाई दिया। इसे बॉर्न शेल द्वारा वर्जन 7 एटीएंडटी यूनिक्स में लिया गया था, जिसे नाम शेट विरासत में मिला था।

1989 में एटी एंड टी सिस्टम वी रिलीज़ 4 यूनिक्स से बॉर्न शेल के बाद बीएस के लाइसेंस के तहत श का यह संस्करण फिर से लिखा गया था।

इसलिए दोनों परियोजनाओं को बॉर्न शेल का उपयोग नहीं करने और एक सच्चे ओपन सोर्स शेल के लिए व्यवस्थित होने के लिए मजबूर किया गया था।


7

अन्य समस्याएं रही हैं। बॉर्न शेल ने मॉलॉक () के बजाय sbrk () का उपयोग किया और इसने इसे बहुत पोर्टेबल नहीं बनाया।

OpenSolaris के माध्यम से बॉर्न शेल ओपनसोर्स बन गया था, बाद में मैंने ज्यॉफ कोलाइर (उसी व्यक्ति ने मलबे से बचने में मदद की) के साथ मॉलॉक () द्वारा sbrk () की जगह एक बहुत ही पोर्टेबल संस्करण और बाद में एक वास्तव में पोर्टेबल संस्करण बनाया। कोर्न शेल)।

प्रारंभिक कारण, मैंने बॉर्न शेल का एक पोर्टेबल संस्करण क्यों बनाया है कि मुझे 1982 और 1984 के बीच अपने "बीएच" के लिए लिखे गए इतिहास संपादक को बॉर्न शेल में भी उपलब्ध कराना पसंद है। इस बीच, मैंने बोर्न शेल के लिए "बीश" के लिए लिखी गई अधिकांश अनूठी विशेषताओं को चित्रित किया।

यह दूसरों के बीच में है:

  • साइगविन सहित लगभग हर जगह संकलन और कार्य
  • LRU रिंग बफर के साथ इतिहास संपादक
  • बिलियन TERMCAP
  • उन्नत उपनाम (वैश्विक लगातार उपनाम, स्थानीय उपनाम, ....) और "डोश" बिलिन के साथ मिलकर, बॉर्न शेल एकमात्र बॉर्न शेल एक जैसे कार्यान्वयन है जो पैरामीटर बनाने योग्य उपनाम की अनुमति देता है।
  • कच्चे मोड में इतिहास संपादक में जटिल उपनामों को संपादित करने का समर्थन।
  • .Sh *। चर के माध्यम से निकास (2) कोड के सभी 32 बिट्स तक पहुंचें।
  • 6 अंकों के संकल्प के साथ उन्नत स्वचालित समय
  • pushd / popd / dirs
  • बिलियन "खोज"
  • स्टेडर से पाइप
  • बेहतर प्रदर्शन के लिए vfork () का उपयोग करना।
  • अंत में SVr4 बॉर्न शेल से सभी प्रलेखित बग तय किए, उदाहरण के लिए हमेशा नौकरी नियंत्रण मोड में काम करता है। ...

ऑनलाइन मैन पेज इस पर है: http://schillix.sourceforge.net/man/man1/bosh.1.html स्रोत यहाँ schily toolbox का हिस्सा हैं:

https://sourceforge.net/projects/schilytools/files/

मैं उपयोग करने की सलाह देता हूं: http://sourceforge.net/projects/schilytools/files/schily-2015-08-18.tar.bz2 या एक नया संस्करण।

PS मुझे फीडबैक में दिलचस्पी है


हाय जोर्ज। क्यों उन्हें एक शेल के बजाय बॉर्न शेल में पोर्ट किया गया जो पहले से ही कुछ बीएसडी श या पीडीक्स की तरह पॉसिसीफाइड था?
स्टीफन चेजलस

बॉर्न शेल पोर्टिंग एक चुनौती थी क्योंकि यह स्टडियो का उपयोग नहीं करता है। यह मूल csh स्रोत को लेने के समान ही एक चुनौती थी और इसे वैक्स असेंबलर में लिखे गए गैर-stdio प्रिंटफ के स्थान पर संकलित किया। लेकिन मैंने पहले ही बॉर्न शेल में बहुत सारे नए पॉसिक्स फीचर जोड़े हैं और मैं अलग-अलग फाइल सिस्टम पर / ar / usr के साथ बूट करने के लिए SchilliX पर बॉर्न शेल के साथ रहना पसंद करता हूं जो कोर्न शेल के साथ संभव नहीं है।
स्किल

यह भी ध्यान दें कि मैं यह सत्यापित करना चाहता था कि vshork () का उपयोग करने से ksh की गति होती है। अब जब मैंने vfork () का उपयोग करने के लिए बॉर्न शेल को परिवर्तित कर दिया है, तो हाल के ksh संस्करणों के समान तेज़ है। यह एक अनुभव है जो आपको केवल मूल बॉर्न शेल स्रोत कोड से शुरू होने पर मिलता है।
स्किल

ठीक है, लेकिन जब तक आप उस श POSIX अनुरूप को नहीं बनाते हैं, तब तक यह बहुत अधिक रुचि को आकर्षित करने की संभावना नहीं है। मुझे याद है कि आप बॉस्टन शेल के POSIX के साथ असंगति के बारे में ऑस्टिन समूह के एमएल से पूछ रहे हैं, क्या यह कुछ ऐसा है जिस पर आप काम कर रहे हैं (जिसका अर्थ होगा कि बैकवर्ड कम्पैटिबिलिटी को तोड़ना बॉर्न शेल को तोड़ देगा)? इसके अलावा लोग (मैं कम से कम) पोसिक्स श सिंटैक्स को बोर्न शेल पर प्रगति मानते हैं। अपने बॉर्न-व्युत्पन्न शेल को कॉल करते हुए बॉर्न शेल को गलत प्रभाव भेज सकते हैं। बिमश (बॉर्न सुधरा (अला वी / विम)) के बारे में कैसे?
स्टीफन चेज़लस

माई बॉर्न शेल पहले से ही कुछ पहलुओं में ksh से बेहतर है, उदाहरण के लिए, आधुनिक UNIX सुविधाओं के आधार पर बेहतर उपनाम, पुशड / पोप / dirs और संसाधन usilisation समर्थन को लागू करने के बजाय अगर ksh करता है जो अभी भी SVr2 आधारित है। आप खोल में रुचि और कुशल होने लगते हैं के रूप में, मैं पढ़ने के बाद आप बॉर्न शैल में अगले देखना चाहेंगे क्या इस पर विचार प्राप्त करना चाहते हैं: schillix.sourceforge.net/man/man1/bosh.1.html ध्यान दें कि अब तक, मेरे पास सभी नए कोड # ifdef'd और कुछ फीचर्स (जैसे stderr पाइप) को सेट (1) के माध्यम से स्विच करने की आवश्यकता है।
स्किल

4

यह गोले से जुड़ा हुआ है जो 100% पिछड़े संगतता प्रदान करता है । आप कुछ भी नहीं खोते हैं जो मूल शेल में है, लेकिन इसके शीर्ष पर अधिक सुविधाएँ प्राप्त करते हैं। वहाँ कोई नकारात्मक पहलू है तो क्यों नई सुविधाओं पर याद आती है? यह वही कारण /bin/viहै जो आमतौर पर विम से जुड़ा होता है ।


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

3
"कोई नकारात्मक नहीं" - गति। जैसे bashबहुत है, की तुलना में बहुत धीमीdash
strugee

@strugee यदि आप एक शेल में एमएस-रेंज सुधार की गति की तलाश कर रहे हैं, तो आप शायद नौकरी के लिए सही उपकरण का उपयोग नहीं कर रहे हैं।
क्रिस डाउन

1
@ क्रिसडाउन "एमएस-रेंज सुधार" को परिभाषित करता है?
स्ट्रूजी

2
POSIX श सिंटैक्स बॉर्न श सिंटैक्स के साथ पूरी तरह से पीछे संगत नहीं है। उदाहरण के लिए, IFS=,; rm file1,file2,file3बॉर्न शेल में उन 3 फ़ाइलों को हटा देगा। वह (मूर्खतापूर्ण) सुविधा POSIX श में हटा दी गई थी। दर्जनों सूक्ष्म अंतर हैं जो पोसिन श के साथ अलग तरीके से काम करने के लिए बॉर्न शेल के लिए लिखी गई एक स्क्रिप्ट का कारण बन सकते हैं।
स्टीफन चेज़लस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.