मुख्यधारा के बीच बुनियादी अंतर क्या हैं * NIX गोले? [बन्द है]


52

मुख्यधारा * NIX गोले के बीच बुनियादी अंतर क्या हैं और कौन से परिदृश्य आपको एक दूसरे का उपयोग करने के लिए प्रेरित कर सकते हैं? मैं समझता हूं कि इसमें से कुछ शायद उपयोगकर्ता की पसंद में आता है, लेकिन मैंने केवल कभी भी बैश का इस्तेमाल किया है और मुझे यह सुनने में दिलचस्पी है कि एक और शेल कहां उपयोगी हो सकता है।

इसके अलावा, एक शेल या किसी अन्य के तहत चलने पर उपयोगकर्ता-लिखित शेल स्क्रिप्ट पर कोई प्रभाव पड़ता है या क्या यह फ़ाइल के शीर्ष पर शेल को बदलने की बात है? मेरी वृत्ति कहती है कि यह इतना आसान नहीं है।

जवाबों:


52

इंटरैक्टिव उपयोग के लिए, वहाँ दो मुख्य दावेदार हैं बैश और zsh , प्लस घुमक्कड़ tcsh और नवागंतुक मछली

  • बैश GNU प्रोजेक्ट का आधिकारिक शेल है और अधिकांश लिनक्स वितरण पर डिफ़ॉल्ट शेल है। आधार स्थापना के हिस्से के रूप में एक सभ्य संवादात्मक खोल के साथ जहाज नहीं करने वाले अन्य यूनियनों पर, मुझे लगता है कि बैश वह है जो लोग चुनते हैं, आत्म-सुदृढीकरण में "बैश हर जगह है इसलिए मैं इसे भी इस्तेमाल करूंगा" लूप। यह भी देखें कि हर जगह बैश क्यों है? (बहुत सारी ऐतिहासिक जानकारी के साथ)।

  • Zsh में बैश की लगभग हर सुविधा है और कई और अधिक (उपयोगी!) सुविधाएँ हैं। इसका मुख्य नकारात्मक पक्ष कम प्रसिद्ध है, जो एक व्यावहारिक बात के रूप में है जिसका अर्थ है कि आप इसे पहले से स्थापित सिस्टम पर किसी और के द्वारा स्थापित किए जाने की कम संभावना रखते हैं और इसके बारे में तीसरे पक्ष के दस्तावेज कम हैं। यह भी देखें कि आप किस zsh फीचर्स का उपयोग करते हैं? , क्या विशेषताएं zsh में हैं और बैश से गायब हैं, या इसके विपरीत?

  • Tcsh एक बार (1990 के दशक की शुरुआत तक) अपने पूर्ववर्ती csh की तरह सबसे अच्छे इंटरैक्टिव फीचर्स वाला खोल था। इसने इसे इंटरैक्टिव उपयोग के लिए लोकप्रिय बना दिया (लेकिन स्क्रिप्टिंग के लिए नहीं )। Zsh ने tcsh के साथ पकड़ा और काफी तेजी से इसमें और सुधार हुआ, और 2000 के दशक की शुरुआत में bash ने प्रोग्रामयोग्य (पूरा होने के साथ) पकड़ लिया, जबकि tsh ने पिछले 15 वर्षों में मुश्किल से कोई प्रगति की है। इसलिए अब tcsh सीखने का बहुत कम कारण है।

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


स्क्रिप्टिंग के लिए, ऐसी कई भाषाएँ हैं जिन्हें आप लक्षित करना चाहते हैं, इस बात पर निर्भर करता है कि आप अपनी स्क्रिप्ट को कितना पोर्टेबल बनाना चाहते हैं।

  • कुछ भी जो यूनिक्स की तरह होने का दिखावा करता है उसके पास एक बॉर्न - सुंदर शेल है /bin/sh। अभी भी कुछ व्यावसायिक यूनियनें हैं जहाँ पॉसिक्स का अनुपालन /bin/shनहीं किया जाता है ।

  • लगभग हर अब चलने वाले यूनिक्स में एक shनिष्पादन योग्य है जो कम से कम POSIX.2-1992 के साथ कम से कम अनुपालन करता है और आमतौर पर कम से कम POSIX: 2001 उर्फ ​​सिंगल यूनिक्स v3 । यह शेल एक अलग डायरेक्टरी जैसे /usr/bin/posixया में रह सकता है /usr/xpg6/bin। POSIX एमुलेशन लेयर्स भी मौजूद हैं हर सिस्टम के बारे में जो इसे सपोर्ट करने के लिए काफी शक्तिशाली है, जिससे यह एक आकर्षक लक्ष्य बन जाता है।

  • कई यूनिक्स प्रणाली है ksh93 (सरणियों, साहचर्य सरणियों, विस्तारित globs (है, जो कि POSIX श का अभाव है कुछ बहुत ही उपयोगी सुविधाओं लाता है *(foo), @(foo|bar), ...), अशक्त globs ( ~(N)foo*,) ...)। Ksh शुरू में व्यावसायिक सॉफ्टवेयर था (यह कुछ आदतों के सेट होने के बाद 2000 में नि: शुल्क हो गया), और कई मुफ्त यूनियनों (लिनक्स, * बीएसडी) को केवल बहुत पुराने मुफ्त क्लोन ( pdksh ) प्रदान करने की आदत पड़ गई, इनमें से कई उपयोगी सुविधाओं का अभाव था । Pdksh अब OpenBSD के बाहर mksh द्वारा विस्थापित हो रहा है , लेकिन सभी ksh93 सुविधाओं को लागू करने के लिए भी mksh कम हो जाता है। आज, आप हर जगह उपलब्ध ksh93 पर भरोसा नहीं कर सकते, विशेष रूप से लिनक्स पर जहां बैश आदर्श है।

  • बैश हमेशा लिनक्स (कुछ एम्बेडेड वेरिएंट को छोड़कर) और अक्सर अन्य यूनियनों पर उपलब्ध होता है। इसमें ksh93 की अधिकांश उपयोगी विशेषताएं हैं, हालांकि कभी-कभी एक अलग वाक्यविन्यास के साथ।

  • Zsh में ksh93 और बैश की सबसे उपयोगी विशेषताएं हैं। इसका मुख्य सिंटेक्स क्लीनर है लेकिन बॉर्न के साथ असंगत है। MacOS को छोड़कर, उस सिस्टम पर उपलब्ध नहीं होने पर zsh पर भरोसा न करें जिसे आपने इंस्टॉल नहीं किया था।

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


4
स्क्रिप्टिंग के लिए मैं डैश को लक्षित करता हूं, (जब तक कि मुझे bash की उन्नत विशेषताओं की आवश्यकता नहीं है) जिसमें न्यूनतम सुविधा सेट है, और अधिकतम संगतता के लिए पॉज़िक्स शिकायत है। (और यह छोटा प्रकाश और तेज है)
hildred

महान डॉक्यूमेंटेशन! दो नोट। सबसे पहले, सोलारिस उन "वाणिज्यिक यूनियनों में से एक है, जहाँ / बिन / श POSIX अनुरूप नहीं है।" विशेष रूप से, यह उपयोग करता है jsh(जो जावा शेल नहीं है!), जिसमें चर प्रतिस्थापन की कमी होती है जैसे ${VAR#foo}और ${VAR%bar}
एडम काटज़

दूसरा, tcshयूनिक्स उपयोगकर्ताओं को, जो पहले ~ मध्य -90 (जो दोनों का इस्तेमाल किया गया उनकी चाल सीखा के बीच नहीं बल्कि लोकप्रिय है bashऔर zsh,) विशेष रूप से पुराने यूनिक्स + बीच Cडेवलपर्स, जो के साथ जीवन शुरू किया था csh(अनुस्मारक, में cshके लिए खड़ा है Cभाषा , जो बोर्न-शैली के गोले से अपने मतभेदों की प्रेरणा थी)। यह भी देखें csh प्रोग्रामिंग माना हानिकारक है, जो मैं अक्सर POSIX पर सुझाव के लिए उपयोग गहरी जादू (अपने विरोधी csh तर्कों के अलावा)।
एडम काटज़

Mac OS X कभी भी "OS / X" नहीं है। (: और बॉर्न के साथ zsh असंगत कैसे है? (ठीक है, शब्द-विभाजन चर विस्तार जैसी चीजों को छोड़कर।)
सिल्वरवुल्फ - बहाल मोनिका

@seaturtle शब्द-बंटवारे चर विस्तार नहीं है, जो कि कई श लिपियों को तोड़ देगा यदि आपने उन्हें zsh के साथ चलाने का प्रयास किया है (जब तक कि आप शश / ksh एमुलेशन मोड में zsh नहीं चलाते हैं)।
गिल्स एसओ- बुराई को रोकना '

27

शेल के दो मूल स्वाद हैं, श (जैसे, बैश) और csh (जैसे, tsh)। संवादात्मक उपयोग के लिए, यह ज्यादातर उस चीज़ के लिए आता है जिसे आप उपयोग कर रहे हैं। मैंने सालों से csh, और फिर tsh का उपयोग किया है और इसे स्विच करना दर्दनाक होगा, सिर्फ इसलिए कि मैं इसका उपयोग कर रहा हूं। मैंने बैश का भी उपयोग किया है, और मुझे नहीं लगता कि स्विच करने के लिए कोई बाध्यकारी कारण हैं। सिवाय शायद अगर एक या दूसरे मशीनों पर उपलब्ध नहीं है जो आप नियमित रूप से उपयोग करते हैं।

प्रोग्रामिंग के लिए, वाक्यविन्यास अलग है। आप केवल शेल नहीं बदल सकते हैं, लेकिन स्क्रिप्ट के सिंटैक्स को भी बदलने की आवश्यकता है। स्क्रिप्टिंग के लिए, आप श या बैश का उपयोग करना चाहते हैं। सिंटैक्स स्क्रिप्टिंग के लिए बहुत अधिक उत्तरदायी है, जैसा कि यहाँ बताया गया है ( लिंक के लिए रिकार्डो मुर्री के लिए धन्यवाद । बैश स्क्रिप्टिंग पर एक अच्छा मार्गदर्शक है

यदि आपने एक शेल पर निर्णय नहीं लिया है, और आप कुछ स्क्रिप्ट लिखने की अपेक्षा करते हैं, तो मैं बस आपको सीखने के लिए आवश्यक चीजों की मात्रा को कम करने के लिए बैश का उपयोग करेगा।


12

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

AT & T वास्तव में UNIX व्यवसाय में नहीं था, इसलिए इस समय बहुत ही मूल OS को कुछ हद तक बर्कले द्वारा अपनाया गया था, और उन्होंने BSD UNIX में कुछ बदलाव किए। कई बदलावों के बीच, एक नया शेल था, जिसे csh कहा जाता था, जिसमें sh पर अधिक सुधार था, जिसमें जॉब कंट्रोल बेहतर इंटरएक्टिव उपयोग आदि शामिल थे। दुर्भाग्य से, उन्होंने फैसला किया कि शेड प्रोग्रामिंग सिंटैक्स ने चूसा और अपना बनाया, (कुछ बुरी तरह से) सी कोडिंग शैलियों से कॉपी किया। (एक क्लासिक शेख़ी है http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/ ) तो अब दो वाक्यविन्यास थे।

बाद में, उन्होंने टैब को पूरा करने और कुछ अन्य चीजों को जोड़ते हुए सीएसएच में सुधार किया। यह tcsh बन गया, और यदि आप CSH का उपयोग करते हैं, तो संभवतः यह वही है जो आप उपयोग करते हैं।

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

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

वहाँ भी zsh, 'परम' खोल होना लिखा है। यह लिनक्स की दुनिया में भी बहुत आम है। इसने बैश को बढ़ा दिया (और क्रॉस थोड़ा प्रदूषित हो गया, कुछ नई चीजें बैश हो गईं)।

अगर मैं एक शेल चुनता, तो मैं बैश या ज़श चुनता। बाश संभवतः कुछ अधिक स्थानों पर zsh की तुलना में है। zsh अधिक शक्तिशाली है, लेकिन मेरे लिए बैश ठीक रहा है। वास्तविक / बिन / श बॉर्न शेल ऐतिहासिक कारणों से बस के आसपास है। bash के पास बहुत कुछ है जो ksh को और अधिक प्रदान करना है। वाक्य-विन्यास csh या tsh से अधिक क्लीनर है, और उनमें से किसी एक की तुलना में बेहतर विशेषताएं हैं।

एक स्क्रिप्ट को बदलने के लिए क्या से क्या पर निर्भर करता है। बॉर्न शैल शैली (श, क्ष, बश, zsh) से या csh शैली (csh, tsh) से कठिन होगी। पुराने से नए (/ बिन / श => बैश, / बिन / क्ष => zsh) पर जाना दूसरे तरीके से आसान होगा।


कृपया ध्यान दें कि csh-whynot पृष्ठ सितंबर 1995 में वापस लिखा गया था (शीर्ष पर संस्करण टैग की जाँच करें)। मुझे नहीं पता, लेकिन मैं तब से 18 वर्षों में बहुत सी चीजों को बदलने की उम्मीद करूंगा।
एक CVn

8

गोले की दो मुख्य शाखाएँ हैं बॉर्न शेल डेरिवेटिव (श, बश, क्श, ऐश, यश और ज़श) और csh डेरिवेटिव (tcsh और ... उहम ... tcsh)।

मुझे संदेह है (हालांकि मेरे पास कोई वास्तविक संख्या नहीं है) जो कि बैश सबसे अधिक व्यापक रूप से उपयोग किया जाता है, यह अधिकांश लिनक्स में डिफ़ॉल्ट शेल लगता है।

एक बोर्न शेल व्युत्पन्न में लिखी गई अधिकांश चीजें संभवतः दूसरों में काम करेंगी। बॉर्न शेल में लिखी गई अधिकांश चीजों को संभवतः csh या tsh के नीचे चलाने के लिए संशोधित करने की आवश्यकता होगी।

व्यक्तिगत रूप से मैंने ksh का उपयोग किया जब मैंने शुरुआत की क्योंकि मैं उस प्रणाली पर था जो मैं उपयोग कर रहा था। मैं मुख्य रूप से अब बैश का उपयोग करता हूं।


1
मछली एक csh प्रेरित खोल है
hildred

1

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

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.