Z खोल (zsh) जैसे विकल्पों पर, मैंने हर लिनक्स वितरण में डिफ़ॉल्ट रूप से बैश का उपयोग किया है । क्या इसका कोई तकनीकी या ऐतिहासिक कारण है?
Z खोल (zsh) जैसे विकल्पों पर, मैंने हर लिनक्स वितरण में डिफ़ॉल्ट रूप से बैश का उपयोग किया है । क्या इसका कोई तकनीकी या ऐतिहासिक कारण है?
जवाबों:
इतिहास (अनुसंधान के माध्यम से नहीं, बल्कि बेल लैब्स लोगों के साथ पूरी तरह से बहुत अधिक समय बिताने के माध्यम से प्राप्त):
शुरुआत में (यदि आप शुरुआत को यूनिक्स संस्करण 7 मानते हैं) बोर्न शेल था। स्टीव बॉर्न यह दिखाने के लिए पहली बार थे कि शेल जो उपयोगकर्ता की बातचीत को नियंत्रित करता है वह एक उपयोगकर्ता कार्यक्रम हो सकता है और ऑपरेटिंग सिस्टम का एक विशेष हिस्सा नहीं है। एक ऐतिहासिक सफलता। शेल स्वयं स्क्रिप्टिंग के लिए अपेक्षाकृत स्वच्छ था, लेकिन इसमें कमांड-लाइन संपादन या नौकरी नियंत्रण नहीं था। यूनिक्स शेल के लिए बॉर्न का परिचय आज भी शुरुआती उपयोगकर्ताओं के लिए उपयोगी है।
संपादित करें : मैंने केन थॉम्पसन और जॉन माशेय से कुछ "प्रागितिहास" को नजरअंदाज कर दिया है, जो कि मल्टीिक्स से भी है। मुझे यकीन है कि बॉर्न को इस काम के बारे में पता था (वह उसी प्रयोगशाला में, 1127, बेल लैब्स में था), लेकिन बॉर्न का खोल निश्चित था, और स्टीव बॉर्न द्वारा व्याख्या के अलावा पहले के काम का बहुत कम प्रभाव था। उदाहरण के लिए, हालांकि केन ने बाद में प्लान 9 सी कंपाइलर लिखा और प्लान 9 पर बहुत प्रभावशाली था, लेकिन प्लान 9 शेल (आरसी) पर टॉम डफ के पेपर में केवल बॉर्न के शेल का उल्लेख है, थॉम्पसन का नहीं।
शेल केवल एक उपयोगकर्ता कार्यक्रम है, इसलिए कोई भी एक लिख सकता है। जैसा कि संस्करण 7 यूनिक्स न्यू जर्सी में बनाया जा रहा था, बर्कले यूनिक्स कैलिफोर्निया में बनाया जा रहा था। बर्कले में बिल जॉय ने लिखा csh
, सी शेल। जॉय ने नौकरी नियंत्रण और इतिहास, और बाद में कमांड-लाइन एडिटिंग को जोड़ा, लेकिन बॉर्न के काम के बारे में पता नहीं था और इसलिए थॉम्पसन शेल (जिसे मैंने पिछली बुलेट में "प्रागैतिहासिक" माना था) पर उनकी भाषा आधारित थी। यूनिक्स समुदाय को नौकरी पर नियंत्रण पसंद था, लेकिन वे बॉर्न की भाषा से भी प्यार करते थे। Csh भाषा के प्रति विशेष रूप से अच्छे नहीं के लिए, Csh प्रोग्रामिंग को हानिकारक माना जाता है । एक समय के लिए, कई लोगों ने csh
इसके नौकरी-नियंत्रण और इतिहास की विशेषताओं के लिए इंटरएक्टिव रूप से उपयोग किया , लेकिन sh
स्क्रिप्ट लिखने के लिए बॉर्न का उपयोग किया । यह स्थिति आदर्श से कम थी।
संपादित करें : के कालक्रम पर मुझे सीधा करने के लिए DigitalRoss का धन्यवाद csh
। जब से मैंने अपनी शिक्षा ऐसे लोगों से प्राप्त की जो बीएसडी को "बर्कले विधर्म" के रूप में संदर्भित करते हैं, तो मुझे वहां तथ्यों की बहुत कमी थी।
बेल लैब्स में डेव कोर्न ने कॉर्न शेल (ksh) का उत्पादन करने के लिए बॉर्न शेल की शानदार री-इंजीनियरिंग की। यह बॉर्न शेल के साथ पूरी तरह से पिछड़ा हुआ था, sh
लेकिन अमूल्य सुधारों की एक नाव प्रदान करता था। ksh
POSIX मानक का आधार बन गया और सूर्य सॉफ्टवेयर के साथ मानक भेज दिया गया। (यह इस तथ्य के बावजूद कि बिल जॉय ने सन को ढूंढने में मदद करने के लिए बर्कले को छोड़ दिया और वह उनके प्रमुख सॉफ्टवेयर दोस्तों में से एक था।)
बेल लैब्स और एटी एंड टी मूर्खतापूर्ण ksh
स्रोत बनाने में असफल रहे । ksh88
व्यापक रूप से उपयोग किया जाता है, लेकिन स्रोत होना कानूनी नहीं है। कुछ लोग इतने आदी हो जाते हैं कि वे डिजिटल अपराधी बन जाते हैं।
संपादित करें : क्या यह वास्तव में इतना मूर्ख था? जानना मुश्किल है। बर्कले पहले से ही यूनिक्स को दूर दे रहा था, और अन्य निगमों को जल्द ही पालन करना था, लेकिन यह अभी भी युग था जब कॉर्पोरेट मास्टर्स यूनिक्स के लिए चार्ज करने में विश्वास करते थे। लेकिन परिणाम: एटी एंड टी यूनिक्स कई बार किसी भी पार्टी को बेच दिए जाने के बाद मर चुका है। बीएसडी और उसके डेरिवेटिव जीवित और अच्छी तरह से हैं, लेकिन "लिनक्स" और "जीएनयू" नामक इन अपस्टार्ट चीजों में माइंडशेयर का एक बड़ा अंश है जो एक बार बेल लैब्स से संबंधित था।
फ्री सॉफ्टवेयर फाउंडेशन एक "क्लीन-रूम" करता है, जो कि POSIX शेल के स्क्रैच कार्यान्वयन से लेकर, डेव कॉर्न के सभी विचारों को वर्तमान के साथ-साथ, सामान्य रूप से एफएसएफ स्टाइल में जोड़कर अपने स्वयं के नए फीचर्स जैसे प्रोग्रामेबल कम्प्लीमेंट को पूरा करता है। वे इसे "बॉर्न फिर से" शेल कहते हैं, या bash
।
1990 के दशक के मध्य में एटी एंड टी के खुले स्रोत थे ksh93
, लेकिन तब तक व्यापक रूप से गोद लेने के लिए बहुत देर हो चुकी है। लाइसेंसिंग समझौता अजीब तरह से गैरमानक है। bash
और ksh
मोड़ना, और ksh
इतिहास में अपनी जगह के साथ बाजार में हिस्सेदारी को कभी हासिल नहीं करता है।
सबक:
बाजार जीत (श) के लिए पहला पर्याप्त उत्पाद।
लोग नई सुविधाओं (नौकरी पर नियंत्रण, कमांड पूरा होने) से प्यार करते हैं, लेकिन वे उन्हें और भी अधिक प्यार करते हैं जब उनकी पुरानी स्क्रिप्ट काम करना जारी रखती है।
संपादित करें : इंजीनियरिंग के प्रोफेसरों को इतिहास को विज्ञान के इतिहासकारों के पास छोड़ना चाहिए :-)
बैश के लिए दो पूरी तरह से अलग चीजें हैं।
यह एक अच्छा खोल है। यह शायद 2 गोले में से एक है (दूसरा zsh है) जो इतिहास के प्रतिस्थापन csh
जैसे कुछ शांत विशेषताओं को पॉज़िक्स सिंटैक्स में एकीकृत !
करता है। इसमें सरणियों सहित बहुत सारे एक्सटेंशन हैं।
यह FSF / GNU शेल है। खुले स्रोत की दुनिया में, यह इसे एक प्रकार का केक देता है।
मुझे यह भी जोड़ना चाहिए कि यह हमेशा डिफ़ॉल्ट नहीं होता है। ash
अक्सर / बिन / श के रूप में उपयोग किया जाता है ताकि bash
इंटरेक्टिव शेल हो सकता ash
है, "बस कमांड फाइल चलाएं" शेल है। ऐसा इसलिए है क्योंकि ash
यह छोटा और तेज़ है, और इसमें पॉज़िक्स विशेषताएं हैं, इसलिए यह एक उचित उपसमूह है। ash
एक इंटरैक्टिव शेल के रूप में उपयोग करना कभी-कभी समस्याग्रस्त होता है। पर, कहते हैं, NetBSD, यह अच्छी तरह से काम करता है, क्योंकि यह सभी सुविधाओं के साथ बनाया गया है। यह उनके एक शेल की तरह है जबकि bash
एक बाहरी पैकेज है। लेकिन लिनक्स ash
पर आमतौर पर गैर-संवादात्मक माना जाता है, इसलिए वे इसे इतिहास के बिना और सिद्धांत पर (महत्वपूर्ण) लाइन संपादन के बिना संकलित करते हैं कि यह सिर्फ उन विशाल gnu configure
लिपियों को चलाने के लिए उपयोग किया जाता है ।
खोल का वास्तविक इतिहास
अद्यतन: वेब पर जगह-जगह से कॉपी किए जा रहे शेल का एक गलत इतिहास है, और लोग इसे स्पष्ट रूप से विश्वास कर रहे हैं। मैं एक सटीक संस्करण देने की कोशिश करूंगा और यहां इसे प्रमाणित करने के लिए कुछ लिंक प्रदान करूंगा।
<, >, >>, |, &
, लेकिन इसमें सिर्फ goto
एक बाहरी प्रोग्राम के माध्यम से सरल नियंत्रण वाक्यविन्यास था जो मानक इनपुट पर खोजा गया था। तब कोई जटिल शेल स्क्रिप्ट नहीं थी। बाद के गोले एक अलग fd पर कमांड इनपुट खोलेंगे। यह आज साधारण लग सकता है लेकिन 1970 में आई हॉरर-फिल्म में यह पृथ्वी पर सबसे अच्छी चीज थी। मानो या न मानो, इस प्राचीन शेल की आज अपनी ट्विटर स्ट्रीम है और निश्चित रूप से, एक होम पेज है ।csh
, लिखा है (जैसा था vi
) द्वारा बिल जॉय यूसीबी पर। यह GNU रीडलाइन और NetBSD एडिटलाइन से पहले था, इसलिए यह !
सिंटैक्स के साथ इतिहास करने के लिए पूरी तरह से उचित प्रतीत हुआ होगा । Csh ने आज के अधिकांश शेल फीचर्स जोड़े लेकिन csh सिंटैक्स के साथ। csh ने कोई सिंटैक्स नहीं बदला , कृतज्ञतापूर्वक या अन्यथा। यह वास्तव में थॉम्पसन शेल के लिए पीछे की ओर संगत था, और मूल रूप से टीएस स्रोत कोड शामिल था।osh
और csh
कुछ समय के लिए लोकप्रिय रहा । कोई इंटरनेट नहीं था और इसे SW लाइसेंस दिया गया था, इसलिए उस वातावरण में यह संभव है कि स्टीफन बॉर्न को जॉय के खोल के बारे में पता नहीं था और निश्चित रूप से जॉय बॉर्न के बारे में नहीं जानता था। यह संभव है कि दो गोले पहली बार मिले जब यूसीबी को एक वैक्स मिला और अब भुलाए गए यूनिक्स / 32 वी का एक प्रीलेयरेज मिला । मुझे याद है कि बिल स्मृति आवंटन के बारे में शिकायत करता है। ध्यान दें कि दोनों गोले V6 खोल के पीछे-संगत थे, उन्होंने बस अलग-अलग दिशाओं में वाक्य रचना को बढ़ाया। ksh
। आखिरकार, csh
अर्ध-उपलब्ध स्रोत कोड था, लेकिन इसे एटी एंड टी और कैलिफोर्निया विश्वविद्यालय के बीच एक मुकदमे में बांधा गया था । फिर भी, ये बीएसडी यूनिक्स के शानदार दिन थे क्योंकि परिष्कृत कंपनियां $ 50,000 का शुल्क एटी एंड टी लाइसेंस खरीद सकती थीं लेकिन 4.x बीएसडी वितरण स्थापित करती थीं, और विश्वविद्यालयों ने इसे मुफ्त में प्राप्त किया।csh
सिंटेक्स के साथ बॉर्न शेल सिंटैक्स के साथ गया, और कुछ ने दोनों को मिला दिया। आप था कम से कम tcsh
, zsh
, bash
, और ash
। बॉर्न सिंटैक्स "आधिकारिक" था, एटी एंड टी रिलीज का हिस्सा था, लेकिन उन दिनों में बीएसडी काफी महत्वपूर्ण था, और सूर्य, शुरू में बीएसडी, ने यूनिक्स एसडब्ल्यू की एक उचित राशि वितरित की जिसका दुनिया ने सामना किया।/bin
और /sbin
निर्भर करता है /usr
, तो वह टूट गया है और उसे ठीक करने की आवश्यकता है; उन्हें केवल पुस्तकालयों पर निर्भर रहना चाहिए /lib
। केवल login
PAM की जरूरत है; "नया एपीआई" जिसके लिए डायनेमिक लिब की आवश्यकता होती है, वह एनएसएस होगा। "की ओर झुकाव"? NetBSD 2.0 पहले से ही पूरी तरह से गतिशील है /bin
और /sbin
5 साल पहले, FreeBSD 5.2 और भी लंबे समय से पहले स्विच किया गया था, और लिनक्स ... अच्छी तरह से, जो डिस्ट्रो द्वारा बदलता है, लेकिन यह एक लंबा समय भी रहा है।
@DigitalRoss ने जो कहा, उसे जोड़ने के लिए
क्योंकि GNU प्रदान करता है (या प्रदान करता है) जबकि लिनक्स सभी कर्नेल (और आवश्यक समर्थन सामग्री) है, जो कि हम "लिनक्स" को उपयोगी कहते हैं, जो सभी मूल यूनिक्स सॉफ़्टवेयर क्लोन प्रदान करते हैं। बैश GNU प्रोजेक्ट का शेल है, जो यूनिक्स संस्करण 7 से पुराने बॉर्न शेल (श) के क्लोन के रूप में लिखा गया है ।
एक unix.com सर्वेक्षण के अनुसार, यह ksh से बहुत आगे नहीं है।
/ बिन / श 83 8.96%
/ बिन / csh 36 3.89%
/ बिन / ksh 370 39.96%
/ बिन / tcsh 36 3.89%
/ बिन / bash 401 43.30%
बैश को व्यापक रूप से सुविधाओं के समृद्ध सेट के कारण स्वीकार किया जाता है। यह सी-शेल और कॉर्न-शेल जैसे अन्य शेल से सुविधाओं को भी अपनाता है। कृपया सुविधाओं के इन सेट पर एक नज़र डालें ।
क्योंकि 'बैश' 100% 'श / ksh' प्रशंसनीय है और 'ksh' POSIX शेल है।
इसलिए यदि आप POSIX आज्ञाकारी प्रणाली चाहते हैं, और आप लिनक्स पर हैं तो आप बैश का उपयोग करते हैं।
यदि आप एक वाणिज्यिक यूनिक्स पर हैं तो आपको आम तौर पर डिफ़ॉल्ट शेल (कभी-कभी सादे पुराने श) के रूप में ksh मिलता है। किसी कारण के लिए सूर्य अभी भी परतदार csh सी-शेल को डिफॉल्ट करता है।
लाभ पोर्टेबिलिटी है। Hp-ux या AIX के लिए लिखे गए। के पास बिना किसी बदलाव के लिनक्स 'बैश' के रूप में चलने का अच्छा मौका है।
और सभी अन्य उत्तरों को जोड़ने के लिए: zsh
पीछे संगत होने का मतलब नहीं है। आप शायद इसे सेट कर सकते हैं ताकि यह संगत हो, लेकिन फिर आप इसकी सुविधाओं को खो रहे हैं।
मैं प्रयोग करते हैं zsh
में नियमित रुप से इंटरैक्टिव शेल के रूप में, लेकिन bash
/ dash
अधिक एक खोल पटकथा भाषाओं के रूप में मेरे लिए समझदार पसंद करते हैं; वे कम जादू करते हैं और अधिक अनुमानित होते हैं ... यह मेरे लिए अधिक महत्वपूर्ण है जब मैं एक स्क्रिप्ट लिख रहा हूं जो कई वर्षों तक काम करने के लिए है।
बस मामलों को भ्रमित करने के लिए, sh
कमांड कभी-कभी किसी अन्य शेल प्रोग्राम जैसे कि ash
, bash
या के लिए सिर्फ एक प्रतीकात्मक लिंक होता है dash
।
उबंटू ने इसे लिंक करने के लिए उपयोग किया bash
, क्योंकि bash
किसी भी अनुरूप बॉर्न शेल स्क्रिप्ट को चलाने के लिए डिज़ाइन किया गया है।
हाल ही में, हालांकि, उबंटू को sh
लिंक करने के लिए स्विच किया गया dash
। स्क्रिप्ट dash
चलाने के लिए डिज़ाइन किया गया है bash
(और इस प्रकार sh
स्क्रिप्ट भी ), लेकिन इसे केवल स्क्रिप्टिंग के लिए उपयोग करने के लिए डिज़ाइन किया गया है, इसलिए इसमें इंटरैक्टिव सुविधाओं का अभाव है bash
। यह इसे छोटा और (शायद) तेज बनाता है।