क्या zsh के ऊपर बैश का उपयोग करने का कोई कारण है? [बन्द है]


33

मैं उत्सुक हूं कि एक व्यक्ति zsh के बजाय बैश क्यों चलाना चाहेगा। मेरा मतलब है कि zsh पूरी तरह से बैश के साथ पीछे-संगत है। मुझे गलत मत समझो: मैं मार या कुछ भी नापसंद नहीं करता। मैं सही मायने में जानना चाहता हूं कि क्या zsh के इस्तेमाल से कोई फायदा होगा।

तो क्या कारण है कि zsh के ऊपर बैश का उपयोग करना है?


2
बस यह बताना चाहता था कि ZSH पूरी तरह से BASH के साथ संगत नहीं है। ZSH में, सरणी अनुक्रमण 1 से शुरू होता है - BASH में, सरणी अनुक्रमण 0. पर शुरू होता है और साथ ही अन्य अंतर भी होते हैं, लेकिन मैं इसे इंगित करना चाहता था।
चार्ल्स अदीस

जवाबों:


29

दो कारण दिमाग में आते हैं:

पहला - यह व्यावहारिक रूप से हर जगह उपलब्ध है। मेरे पास कई लिनक्स सिस्टम हैं (इस मामले में CentOS 4.x) जिनमें zsh इंस्टॉल नहीं है। इसी तरह मुझे सोलारिस 2.6 और अप, एचपी-यूएक्स 10 और ऊपर, और इसी तरह एआईसीसी के समान अजीब संस्करणों को छूना है। इसलिए मुझे इन कंप्यूटरों पर बैश का उपयोग करना पड़ता है, जो मैं इसलिए करता हूं क्योंकि मैं एक महीने के दौरान अलग-अलग कंप्यूटर के सैकड़ों, यदि नहीं, तो दर्जनों को छूता हूं, और आपके इंटरफ़ेस में निरंतरता प्राप्त करने के लिए आप अंत में उपयोग करके अटक जाते हैं। चूक।

दूसरा - यह व्यावहारिक रूप से हर जगह उपलब्ध है। इसका मतलब है कि मैं एक बैश शेल स्क्रिप्ट लिख सकता हूं और 99% सुनिश्चित हो सकता हूं कि जब यह कहीं और स्थानांतरित हो जाएगा तो यह काम करेगा।

हां, ये कारण सतही रूप से समान हैं, लेकिन इनके पीछे का तर्क अलग है।


2
मुझे एचपीयूएक्स पर ksh88 / ksh93 होने की याद है, हमारे पास बैश स्थापित करने के लिए कभी भी पहुंच नहीं थी।
एलीमेनी

24

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

मुझे लगता है कि यह सब कुछ सरल रखता है, जैसे कि जब भी मैं bash संगत को सेट करता हूं (SH_WORD_SPLIT?) को सेट करता हूं, तब भी मैं सूक्ष्म अंतर में चलता हूं।


3
यह आपके लिए हर GNU / Linux सिस्टम होगा?
औरोल

2
वैसे मैंने पाया है कि यह OS / X और bsd के साथ आता है, मुझे अन्य * निक्स के साथ ज्यादा अनुभव नहीं है, क्या वे (हाल के संस्करण) आमतौर पर बैश नहीं होते हैं?
काइल ब्रांट

1
पुराने सोलारिस संस्करणों में बैश शामिल नहीं था; मुझे आमतौर पर बॉर्न को स्क्रिप्टिंग के लिए शेल होने पर निर्भर रहना पड़ता था। यह थोड़ी देर के लिए मामला नहीं है, लेकिन आप अभी भी कुछ बड़े उद्यमों में इसे चला सकते हैं।
user5336

3
अलग बीएसडी होना चाहिए: तब। कम से कम ओपनबीएसडी में और फ्रीबीएसडी में आपको बंदरगाहों / पैकेजों से अलग से बैश स्थापित करना होगा।
औरोल ११'०१

andol: वे हैं जिनका मैं उपयोग करता था .. मुझे गलत याद रखना चाहिए, या मैंने ऐसा किया और बस याद नहीं है।
काइल ब्रांट

13

zsh पूरी तरह से बैश नहीं है। विभिन्न प्रकार के अंतर हैं। नए ज़श बाश के साथ अधिक संगत है (= ~ समर्थित, अब निष्पादन में अतिरिक्त ध्वज विकल्प हैं, आदि) लेकिन पूर्ण संगतता लक्ष्य नहीं है, "अनुकरण" के तहत भी नहीं।

उदाहरण के लिए, बैश सबस्ट्रिंग $ {foo: ऑफसेट: len} है, लेकिन zsh में यह $ foo [स्टार्ट, एंड] है और यह केवल एक सरल उदाहरण है।

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

बैश POSIX sh + ksh + पांडित्य है, कुछ विशेषताओं के साथ अब zsh से कॉपी किया गया है। इसके पास भी केवल लिखने वाली स्क्रिप्ट हैं लेकिन क्योंकि इसमें कम शक्तिशाली ऑपरेटर हैं, आप अंत में zsh की संक्षिप्तता का उपयोग नहीं करते हैं और चीजें अधिक पठनीय हो सकती हैं ( व्हाट्सएप विभाजन से बचने के लिए सभी उद्धरणों को छोड़कर, बेवकूफ ksh- शैली $ $ का मतलब है) -ईलमेंट-ऑफ-एरे, ऑल-एलिमेंट्स-ऑफ-एरे, आदि)।

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

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


6
nb: $ {foo: ऑफसेट: लेन} है अब, zsh में समर्थित संगतता के लिए।
फिल पी

6

मेरी सलाह: यदि आप पूर्ण पोर्टेबिलिटी के लिए जा रहे हैं, तो बॉर्न शेल नियमों का उपयोग करके लिखें, कोर्न शेल एक्सटेंशन के साथ भी परेशान न करें। जैसा कि उल्लेख किया गया है, कि कुछ पुराने "बड़े बक्से" हैं जिनके चारों ओर उन पर GNU गोले नहीं हैं।

बैश पहले से ही "बहुत अधिक" करता है। मेरे पास काम पर एक दोस्त है जो zsh को पसंद करता है, लेकिन मुझे नहीं पता कि यह वास्तव में क्या करता है।

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


5

ऊपर दिए गए पोर्टेबिलिटी कारण के अलावा, एक और हो सकता है कि बैश अभी भी सुविधाओं को जोड़ रहा है।

उदाहरण के लिए bash v4.x + पेश किया गया:

  • पुनरावर्ती ग्लोबिंग:

    rm -f ** / *। log

  • autocd:

    "Cd / tmp" के बजाय "/ tmp" टाइप करें


2
बश का उपयोग करने के लिए बैश नकल सुविधाओं को zsh से कैसे लिया जाता है?
qqx

5

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

बकवास। यदि आप जानते हैं कि आपके द्वारा देखभाल की जाने वाली प्रत्येक प्रणाली में BASH है तो यह पूरी तरह से उचित कथन है। BASH की कई उपयोगी विशेषताएं हैं जो POSIX श में यथोचित रूप से अनुकरण नहीं की जा सकती हैं। गैर- POSIX सुविधाओं का असफल उपयोग एक महान विचार नहीं है, लेकिन जब आप वास्तव में उनकी आवश्यकता होती है तो उनका उपयोग करना ठीक है।

पोर्टेबिलिटी एक संपूर्ण नहीं है। यह तर्क है कि आपको इसे कितनी दूर ले जाने की आवश्यकता है, जैसे कुछ और। उदाहरण के लिए, फेडोरा RPM पैकेज और फेडोरा पैकेजिंग दिशानिर्देशों के निर्माण के लिए शेल कमांड का उपयोग करता है, क्योंकि चूंकि फेडोरा पर सभी पैकेज मूल रूप से बनाए जाने चाहिए, इसलिए BASH की सभी विशेषताओं का उपयोग करना ठीक है। भले ही BASH के बिना सैद्धांतिक रूप से अन्य विकृतियां अपने स्रोत RPM का पुन: उपयोग करना चाहें, लेकिन उन्होंने आपके "ALWAYS UZE POSIX !! 1" मंत्र के बजाय व्यावहारिकता के आधार पर पोर्टेबिलिटी के बारे में निर्णय लिया।

ZSH ने एक डिफ़ॉल्ट शेल के रूप में नहीं पकड़ा है, केवल इसलिए कि यह आधे पके हुए विचारों का फैलाव है।


2
क्या आप बता सकते हैं कि zsh में आपको कौन सी सुविधाएँ या विचार हैं जो आपको आधे-पके हुए लगते हैं और क्यों?
फ्यूनरल

2

वैसे, आपको यहां कई बार बताया गया bashहै जो व्यावहारिक रूप से हर जगह पाया जाता है, इसलिए इसका उपयोग पोर्टेबल स्क्रिप्ट लिखने के लिए करें, जो कि गलत है

पोर्टेबल यूनिक्स स्क्रिप्ट लिखने का सही तरीका उपयोग करना है sh, जो हर * निक्स सिस्टम में पाया जाता है

सिवाय हर दूसरे खोल shसिर्फ एक दैनिक इंटरैक्टिव उपकरण है आपका।

bashबनाम आने पर zsh- bashसे अधिक में बंडल किया जाता *nixesहै zsh, इसलिए यहां सिस्टम में अतिरिक्त सॉफ़्टवेयर स्थापित करने के नुकसान हैं - आपको इसे बनाए रखना होगा। कुछ लोग zsh को "शांत सुविधाओं" से प्यार करते हैं, इसलिए वे उस कीमत का भुगतान करना पसंद करते हैं, कुछ नहीं।


2
श के कई आधुनिक कार्यान्वयन बस बैश के लिंक हैं।
user9517

2
@ मुख्य उबंटू डिफ़ॉल्ट रूप से डैश का उपयोग करता है , और यहां तक ​​कि अगर shबैश है, तो यह संगतता मोड को चलाने के रूप में सक्षम करता है sh
मॉर्गन

2

और दूसरी बात:

कई प्रोग्राम डिफॉल्ट रूप से कूल बैश पूरा करते हैं। मेरे लिए यह स्विच न करने का कारण है।

[जुलाई 2013 में जोड़ा गया] ऊपर की टिप्पणी के बाद से ज़ीश का उपयोग करने के कुछ वर्षों के बाद, मुझे टैब पूर्णता (यहां तक ​​कि बिल्ट वन, डब्ल्यू / नो थ्री-पर्टी संशोधनों) को शानदार कहना होगा और ऐसा लग रहा है कि यह बैश द्वारा पेश किए गए एक से परे है। । :)।


3
मुझे लगता है कि ZSH के साथ भी काम करता है, ZSH में टैब पूरा होने के साथ, मुझे बहुत सारे प्रोग्राम विशिष्ट तर्क मिलते हैं ...
काइल ब्रांट

दिलचस्प। क्या आप कह रहे हैं कि bash कम्प्लीट फाइल्स zsh के साथ काम करती हैं, या बस कुछ प्रोग्राम्स के पास इसके zsh- स्पेसिफिक कम्प्लीट सामान हैं? अभी भी बैश पूर्ण होने वाली फ़ाइलों के कुछ std लेआउट हैं जो zsh स्वचालित रूप से विचार नहीं कर सकते हैं या नहीं कर सकते हैं। क्या आपने इसे काम करने के लिए अपने zsh config को ट्विक किया है?
वोज्शिएक काज़मारेक

@Wojciech Kaczmarek: मुझे लगता है कि आप निम्नलिखित में से 19.3 चाहते हैं: zsh.sourceforge.net/Doc/Release/zsh_19.html । ईमानदारी से, मैंने कभी भी इसे समझने के लिए समय नहीं लिया, बस फट गया a .shshrc मैंने ऑनलाइन पाया :-) लेकिन यह apt, grep, आदि जैसे कार्यक्रमों से कमांड लाइन तर्क को पूरा करेगा ....
काइल ब्रांट

5
बैश का टैब पूरा होना zsh के पुराने टैब-पूरा सिस्टम के समान है। यह zsh से bash तक कॉपी किए गए विचारों में से एक है (दूसरों को bash से zsh में कॉपी किए गए)। आप "bashcompinit" को चलाकर और फिर zsh के अंदर "कम्प्लीट" और / या "compgen" कमांड्स का उपयोग करके zsh में bash के लिए लिखी गई पूर्ण स्क्रिप्ट का उपयोग कर सकते हैं - यह संभव है क्योंकि bash कार्यक्षमता zsh में उपलब्ध उपसमूह का उपसमूह है और इसलिए अनुकरण किया जा सकता है। इसलिए बैश पर स्विच करने का कोई कारण नहीं है क्योंकि एक कमांड एक बैश पूरा होने के साथ जहाज करता है।
फिल पी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.