अधिकांश OS में डिफ़ॉल्ट शेल क्यों है?


38

अधिकांश OSes (उबंटू, फेडोरा, OSX, आदि) में डिफ़ॉल्ट शेल क्यों है? ऐसा क्यों है कि बहुत सारे उन्नत उपयोगकर्ता ज्यादातर zsh का उपयोग करते हैं? यदि यह अच्छा है, तो यह डिफ़ॉल्ट क्यों नहीं है?

मैं दोनों का उपयोग करता हूं मुझे अपने सभी कार्यों के लिए अंतर दिखाई नहीं देता है :)


5
सब कुछ एक गाऊसी वक्र है: यदि यह सच है कि अधिकांश उन्नत उपयोगकर्ता उपयोग करते हैं ksh, तो यह भी सच है कि अधिकांश लोग एक अलग शेल का उपयोग करते हैं, और यह अपने आप में यह समझाएगा कि kshडिफ़ॉल्ट शेल क्यों नहीं है। हालाँकि मुझे नहीं लगता कि इसका कारण है, चलो कुछ हत्यारे जवाब की प्रतीक्षा करें जो मुझे यकीन है कि यह प्रश्न प्राप्त होगा।
कोस

1
दरअसल, मेरा मानना ​​है कि
उबंटू

1
इसका एक अच्छा जवाब है, मैं वोट देता हूं हम इसे खुला छोड़ देते हैं।
सेठ

जवाबों:


33

मैंने इस पर कुछ पढ़ा और निष्कर्ष यह प्रतीत होता है कि यह GNU का डिफ़ॉल्ट शेल है (ज्यादातर लिनक्स आधारित OS द्वारा उपयोग किया जाता है), और इसलिए यह केवल GNU के हिस्से के रूप में पैक किया जाता है, जबकि इसे बनाने के पीछे 20 साल का विकास भी है। स्थिर और अच्छी तरह से गोल, यह बस सबसे अच्छा ऑल राउंडर है, जो सभी लेकिन सबसे उन्नत उपयोगकर्ताओं की जरूरतों को पूरा करता है।

अधिक के लिए, लिनक्स पर बैश मानक क्यों पढ़ें ? (यूनिक्स और लिनक्स पर एक ही सवाल)।

बस इसमें थोड़ा और जोड़ने के लिए, यदि आप रुचि रखते हैं, तो कई अन्य गोले हैं, यहाँ इस उत्तर में से कुछ हैं :

  • Zsh में अधिक उन्नत इंटरैक्टिव सुविधाएं हैं, लेकिन जब यह स्क्रिप्टिंग की बात आती है, तो कुछ विचित्रता (कम अब के दिनों में वापस आती है)। 1990 के दशक के मध्य में जब लिनक्स अपनी प्रारंभिक अवस्था में था, तब zsh लगभग अज्ञात था।

  • Ksh के बाद से 1980 के मध्य वाणिज्यिक unices पर वास्तविक मानक था, लेकिन यह 2000 तक मालिकाना सॉफ्टवेयर था, इसलिए नहीं लिनक्स पर एक विकल्प। इसके अलावा, ksh में बैश की तुलना में सबपर कमांड लाइन संपादन क्षमता थी।

  • Pdksh , ksh का एक नि: शुल्क क्लोन है, एक विकल्प होगा, लेकिन यह अच्छी तरह से ज्ञात नहीं था और इसमें कमांड कमांड की कमजोर क्षमता थी। (Pdksh अब एक बहुत सक्रिय परियोजना नहीं है, भले ही यह अभी भी कुछ BSDs में उपयोग किया जाता है, अब यह ATTsh मुक्त है।)

  • कुछ वितरण ऐश संस्करण को स्थापित करते हैं /bin/sh। ऐश (जिसका अर्थ है कि राख के गोले के ढीले परिवार में से कोई भी) छोटे और तेज होने के लिए डिज़ाइन किया गया है, जिसमें कोई इंटरएक्टिव विशेषताएं नहीं हैं (यह केवल संपादन स्क्रिप्ट के लिए है)। राख का पुनरुद्धार अपेक्षाकृत हाल ही में हुआ है; 1990 के दशक में मौजूदा वेरिएंट में बहुत सारी विशेषताओं का अभाव था।

  • Tcsh सबसे उन्नत इंटरैक्टिव खोल जब तक zsh साथ आया था था, लेकिन यह और श के साथ असंगत है तो पटकथा के साथ अच्छा नहीं


1
जब आप चीजों को कहीं और से कॉपी-पेस्ट करते हैं, तो आपको स्पष्ट रूप से संकेत देना चाहिए कि यह मामला है।
मूर

1
@ मुरु ने मुझे मूल पोस्ट का लिंक प्रदान किया, लेकिन मैं आपकी बात देखता हूं कि यह स्पष्ट हो सकता है।
मार्क किर्बी

आपकी टिप्पणी का स्रोत क्या है कि zsh में स्क्रिप्टिंग के संबंध में कुछ प्रश्न हैं? कोई बात नहीं, मैं देखता हूं कि टिप्पणी कहीं और से आई है।
स्कूटर

1
आपके पास मछली भी है (जो कि सिंटैक्स के साथ असंगत है)।
लेओ लम

1
क्या आप बताएंगे कि कोर्न शेल संपादन के बारे में क्या कमी थी? यह हमेशा मेरे लिए ठीक काम लगता था, यहां तक ​​कि 90 के दशक में भी।
जोनाथन लेफ़लर

9

यूनिक्स की एटी एंड टी शाखा के बॉर्न शेल ( दिन में वापस एसएच ) में सुधार किया गया और कोर्न शेल, केश द्वारा सुपरसीड किया गया । ksh भी AT & T बेल लैब्स से निकला था और GPL नहीं था (वर्तमान संस्करण एक्लिप्स पब्लिक लाइसेंस है)। सी-शेल, csh यूनिक्स के बर्कले संस्करण से बाहर आया और GPL (BSD लाइसेंस) भी नहीं था और श के मुकाबले अलग-अलग वाक्यविन्यास का भी उपयोग करता था। Z- शेल, zsh श पर सुधार है लेकिन GPL (MIT जैसा लाइसेंस) नहीं है। बैश श पर एक सुधार था, जीपीएल का उपयोग किया और जीएनयू से। सिर्फ लाइसेंस पर ही बैश शायद जीपीएल ऑपरेटिंग सिस्टम के लिए विकल्प होगा। विशेष रूप से एक शेल के साथ एक डिस्ट्रो का मुख्य हिस्सा होता है।

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

जब लिनक्स डिस्ट्रो पहली बार दिखाई दे रहा था और अपने डिफ़ॉल्ट शेल (90 के दशक के मध्य तक) का चयन कर रहा था, तब कोई गीथब (2008) या यहां तक ​​कि सोर्सफॉगर (1999) नहीं था। उस समय, मुझे लगता है कि गैर-जीएनयू परियोजनाओं पर जीएनयू परियोजनाओं का वास्तविक लाभ था और उन पर नए डेवलपर्स ने ध्यान दिया। इसलिए डिस्ट्रोस ज़ेड-शेल को बेहतर रूप में देख सकते हैं, लेकिन यह भी उम्मीद करते हैं कि बैश को आगे बढ़ने में अच्छा समर्थन और रखरखाव मिल रहा होगा, और इसमें और अधिक फीचर भी जोड़े जाएंगे, जिससे यह zsh तक पकड़ सकेगा।

अब जबकि बैश के पास डिफ़ॉल्ट स्थिति के वर्ष हो गए हैं, यह एक डिफैक्टो मानक बन गया है, इसके बारे में लिखी गई पुस्तकों के साथ। नहीं है एक किताब है कि कवर दोनों बैश और जेड खोल , लेकिन यह विशेष रूप से कवर यह है, जबकि वहाँ कई कि बैश के लिए ऐसा करते हैं कर रहे हैं कोई किताब।

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


1

यूनिक्स खोल भाषाएँ सभी बदसूरत हैं। कुछ विशेष रूप से ( csh), कुछ हो सकता है थोड़ा कम ( ksh? मैं वास्तव में पता नहीं है), लेकिन वास्तव में जब यह पठनीयता और बड़ा परियोजनाओं के लिए rigidness जैसे पहलुओं की बात आती है, उनमें से कोई भी पास प्राप्त कर सकते हैं अच्छी तरह से डिजाइन करने के लिए इस तरह के रूप में सामान्य प्रयोजन भाषाओं पायथन, सी # या हास्केल। इसलिए, जब आप कुछ ठोस चाहते हैं, तो आप कभी भी किसी भी शेल फ्लेवर का चयन नहीं करेंगे।

आप उन्हें चुनते हैं जब आप जल्दी से सरल सामान प्राप्त करना चाहते हैं। इसके लिए, आपको चाहिए:

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

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

जो लोग स्विच बनाते हैं, वे इसके बारे में विचार-विमर्श करते हैं और आसानी से अपने पसंदीदा शेल में स्विच करने के लिए पर्याप्त अनुभव करते हैं। OTOH, एक धोखेबाज़ जिसे कम लोकप्रिय शेल के साथ काम करने के लिए मजबूर किया जाता है, अगर वे किसी चीज़ के लिए इंटरनेट पूछते हैं तो यह जल्दी से भ्रमित हो जाएगा। इसलिए, कोई भी डिस्ट्रो जिसका उद्देश्य न केवल यूनिक्स के दिग्गजों के लिए है, अगर यह कुछ भी करता है, बल्कि bashमानक, एक ऐसा कदम उठाता है जिसमें अपेक्षाकृत कम लोगों को लाभ होगा (और केवल थोड़ा)।


1
व्हॉट्सएप की मात्रा की परवाह करने वाली कोई भी भाषा "अच्छी तरह से डिज़ाइन नहीं की गई" है, लेकिन मैं मानता हूं कि लोकप्रियता की कुंजी है।
नागोरा

1
@ नागोरा: राय बदलती है। एफडब्ल्यूआईडब्ल्यू, आप हमेशा व्हाट्सएप के बजाय ब्रेस और अर्धविराम के साथ हास्केल लिख सकते हैं, और मुझे लगता है कि पायथन में इसी तरह की कमियां हैं। केवल, कोई भी ऐसा नहीं करता है, क्योंकि इंडेंटेशन आधारित समूहन केवल पठनीयता के लिए अद्भुत है।
leftaroundabout

1
  1. जरूरत पड़ने पर यह वहीं था
  2. यह पर्याप्त आंख कैंडी है कि शुरुआत उपयोगकर्ताओं को उनके संकेत को अनुकूलित करने में एक सप्ताह खर्च कर सकते हैं।
  3. आम उपयोग के मामले यह काफी अच्छा है (सबसे आम एक एकल आदेश शुरू किया जा रहा है)
  4. जहां यह पर्याप्त रूप से अच्छा नहीं है, वहाँ अजगर और लुआ सुस्त लग सकते हैं।
  5. पर्ल एक भयानक इंटरैक्टिव शेल बनाता है
  6. हालाँकि मछली, ksh या zsh सैद्धांतिक रूप से एक बेहतर शेल हो सकता है, लेकिन जब पर्ल इतनी अच्छी तरह से काम करता है या पोर्टेबिलिटी एक समस्या है तो मुझे परेशान करने के लिए पर्याप्त सुधार नहीं है इसलिए मैं वैसे भी डैश को निशाना बना रहा हूं।

0

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


1
आप किसी भी और सभी बैश स्क्रिप्ट का उपयोग कर सकते हैं क्योंकि कोई भी बात नहीं है कि आपका डिफ़ॉल्ट शेल क्या है। यही स्क्रिप्ट के शीर्ष पर शी-बैंग (#! / Bin / bash) का अर्थ है।
पैंथर

1
@ bodhi.zazen जब तक सिस्टम में बैश शेल मौजूद है। मुझे कम से कम सोलारिस का एक संस्करण ज्ञात है जिसमें बैश शामिल नहीं है।
ट्यूलेंस कोर्डोवा

@ bodhi.zazen दो गोले के बीच स्विच करने में एक मानसिक लागत है - एक बातचीत के लिए और एक पटकथा के लिए। यह आम तौर पर परेशान करने लायक नहीं है।
नागोरा

1
@ नागोरा स्क्रिप्ट चलाने की मानसिक लागत क्या है ?
कोस

@kos यदि आप सचमुच सिर्फ स्क्रिप्ट चला रहे हैं, तो कोई नहीं। यदि आपको स्क्रिप्ट्स को बनाए रखना है और अनुकूलित करना है तो आपको विभिन्न अंतर्निहित गोले के बीच अक्सर काफी छोटे अंतरों को ध्यान में रखना होगा, इस स्थिति में एक धातु की लागत और एक संदर्भ-स्विचिंग लागत होती है जब आपको कुछ काम करना होता है "अन्य" वाक्य रचना।
नागोरा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.