Zsh बनाम बैश स्क्रिप्टिंग। क्या फर्क पड़ता है?

Zsh बनाम बैश स्क्रिप्टिंग। क्या फर्क पड़ता है?
आप जैसे पाठक MUO को समर्थन देने में मदद करते हैं। जब आप हमारी साइट पर लिंक का उपयोग करके खरीदारी करते हैं, तो हम संबद्ध कमीशन कमा सकते हैं। और पढ़ें।

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





दिन का एमयूओ वीडियो सामग्री जारी रखने के लिए स्क्रॉल करें

इन दोनों शेलों के बीच अंतर और समानता को समझने से आपको अपने कमांड-लाइन वर्कफ़्लो को अनुकूलित करने में मदद मिलेगी। प्रत्येक शेल की बारीकियों के बारे में जानने से आपको सूचित निर्णय लेने में मदद मिलेगी।





बैश और ज़श क्या हैं?

बैश Linux और macOS दोनों सिस्टम पर लोकप्रिय है। यह एक शक्तिशाली उपकरण है जिसका उपयोग आप ऑपरेटिंग सिस्टम के साथ इंटरैक्ट करने और कमांड चलाने के लिए कर सकते हैं। आप भी कर सकते हैं शेल स्क्रिप्टिंग के लिए बैश का उपयोग करें , जो एक से अधिक कमांड वाली स्क्रिप्ट लिखकर कार्यों को स्वचालित करता है।





Zsh (Z शेल) बैश का एक विस्तारित संस्करण है जिसमें कई और विशेषताएं हैं। यह macOS पर डिफ़ॉल्ट शेल है। यह लिनक्स सिस्टम पर भी तेजी से लोकप्रिय हो रहा है।

बैश से Zsh पर कैसे स्विच करें

यदि आप Linux सिस्टम का उपयोग कर रहे हैं और Zsh पर स्विच करना चाहते हैं, तो शुरुआत करें इसे स्थापित करने के लिए अपने पैकेज मैनेजर का उपयोग करें . उदाहरण के लिए, डेबियन या उबंटू पर, निम्नलिखित कमांड का उपयोग करें:



 sudo apt install zsh

इसे अपने सिस्टम पर इंस्टॉल करने के बाद, निम्न कमांड चलाकर इस पर स्विच करें:

 chsh -s $(which zsh)

यदि आप macOS का उपयोग कर रहे हैं, तो Zsh पहले से इंस्टॉल है। इस पर स्विच करने के लिए निम्न कमांड चलाएँ:





 chsh -s /bin/zsh

बैश पर वापस जाने के लिए, उपरोक्त कमांड में Zsh को बैश से बदलें।

यह जांचने के लिए कि आप किस शेल का उपयोग कर रहे हैं, निम्न कमांड चलाएँ:





 echo $SHELL

इससे आपको यह पुष्टि करने में मदद मिलेगी कि आप उसी शेल का उपयोग कर रहे हैं जिसका आप उपयोग करना चाहते थे।

Zsh और बैश के बीच अंतर

Zsh और Bash के बीच कई अंतर हैं। इन अंतरों पर विचार करने से आपको यह तय करने में मदद मिलेगी कि कौन सा शेल आपके लिए सबसे उपयुक्त है।

1. शीघ्र अनुकूलन

Zsh आपके संकेतों को अनुकूलित करने का एक आसान तरीका प्रदान करता है % -आधारित पलायन अनुक्रम। यह रंग और जानकारी के साथ गतिशील संकेतों की अनुमति देता है। अपने शेल प्रॉम्प्ट को अनुकूलित करने के लिए, परिभाषित करें PS1 (प्राथमिक संकेत).

 PS1="%F{green}%n@%m %F{blue}%~ %f$ " 

उपरोक्त कस्टम प्रॉम्प्ट उपयोगकर्ता नाम, होस्टनाम और वर्तमान निर्देशिका को विभिन्न रंगों में प्रदर्शित करता है:

  टर्मिनल पर Zsh शीघ्र अनुकूलन

वहां कई हैं Zsh प्रॉम्प्ट को अनुकूलित करने के अन्य तरीके , आपको एक व्यवस्थापक संकेतक सेट करने, दिनांक और समय शामिल करने और नया संकेत सहेजने देता है।

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

 PS1="\[3[32m\]\u@\h \[3[34m\]\w \[3[0m\]$ " 

का उपयोग करते हुए \[3[0m\] यह महत्वपूर्ण है क्योंकि यह सुनिश्चित करता है कि रंग परिवर्तन संकेत के बाद आने वाले पाठ को प्रभावित न करें।

2. सहयोगी सरणियों के लिए समर्थन

Zsh मूल रूप से सहयोगी सरणियों का समर्थन करता है। ये सारणियाँ डेटा को संबद्ध करने का एक सुविधाजनक तरीका प्रदान करती हैं जिससे जानकारी को व्यवस्थित करना और पुनः प्राप्त करना आसान हो जाता है। उपयोग घोषित -ए एक सहयोगी सरणी को स्पष्ट रूप से घोषित करने का आदेश:

 # Declare an associative array in Zsh  
declare -A my_assoc_array

फिर आप सहयोगी सरणी को मान निर्दिष्ट कर सकते हैं:

 my_assoc_array=(key1 value1 key2 value2) 

और, अंत में, उनकी कुंजियों का उपयोग करके मानों तक पहुंचें:

कैसे बताएं कि आपको इंस्टाग्राम पर किसने अनफॉलो किया?
 echo $my_assoc_array[key1] # Outputs: value1

बैश ने सहयोगी सरणियों के लिए मूल समर्थन शामिल किया है संस्करण 4.0 के बाद से. आप उसी तरह मान घोषित और निर्दिष्ट करते हैं जैसे आप Zsh में करते हैं। लेकिन जब सरणी मानों तक पहुंचने की बात आती है, तो आपको कुंजी को घुंघराले ब्रैकेट के अंदर लपेटना होगा:

 echo "${my_assoc_array[key1]}" 

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

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

3. विस्तारित ग्लोबिंग पैटर्न

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

Zsh स्क्रिप्ट में, आप इन पैटर्न का उपयोग करके सक्षम कर सकते हैं सेटऑप्ट आज्ञा। उदाहरण के लिए, सभी का मिलान करना ।TXT वर्तमान निर्देशिका में फ़ाइलें:

 setopt extended_glob 
txt_files=(*.txt)

.log एक्सटेंशन वाली फ़ाइलों को छोड़कर सभी फ़ाइलों का मिलान करने के लिए:

 setopt extended_glob 
non_log_files=^(*.log)

बैश में, आपको इसका उपयोग करके उन्हें सक्षम करना होगा दुकानें के साथ आदेश दें extglob विकल्प। उदाहरण के लिए, सभी का मिलान करना ।TXT वर्तमान निर्देशिका में फ़ाइलें:

 shopt -s extglob 
txt_files=(*.txt)

वाली फ़ाइलों को छोड़कर सभी फ़ाइलों का मिलान करने के लिए ।लकड़ी का लट्ठा विस्तार:

 shopt -s extglob 
non_log_files=!(*.log)

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

4. उन्नत पैरामीटर विस्तार

Zsh मापदंडों के अप्रत्यक्ष विस्तार का समर्थन करता है। यह आपको एक वेरिएबल के मान का विस्तार करने की अनुमति देता है जिसका नाम दूसरे वेरिएबल में संग्रहीत है। इसे प्राप्त करने के लिए, आपको वेरिएबल नाम के पहले विस्मयादिबोधक बिंदु लगाना होगा ! .

 name="foo" 
result="${!name}"
echo "$result"

दूसरी ओर बैश मूल रूप से अप्रत्यक्ष विस्तार की अनुमति नहीं देता है। इसके लिए समाधान का उपयोग कर रहा है eval अंतर्निहित कमांड या ${!था} अप्रत्यक्ष चर संदर्भों के लिए वाक्यविन्यास।

 name="world" 
var="name"
echo ${!var} # This will output: world

बैश और ज़श के बीच समानताएँ

जबकि बैश और Zsh के बीच अंतर हैं, उनमें कुछ समानताएँ भी हैं।

1. कमांड लाइन सिंटैक्स

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

हालाँकि, वाक्यविन्यास में बहुत मामूली अंतर हैं जिन्हें आपको पहचानने और समायोजित करने की आवश्यकता होगी।

2. कमांड प्रतिस्थापन संगति

कमांड प्रतिस्थापन एक कमांड के आउटपुट को दूसरे कमांड में एम्बेड करने की प्रक्रिया है। यह दोनों कोशों के बीच सुसंगत है।

 result=$(ls) 

बैश और Zsh दोनों में, आप इसका उपयोग कर सकते हैं $(कमांड) किसी कमांड के आउटपुट को वेरिएबल में बदलने के लिए सिंटैक्स। यह दो शैलों के बीच स्क्रिप्ट की आसान पोर्टेबिलिटी की अनुमति देता है।

3. स्क्रिप्ट डिबगिंग विकल्प

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

 # Debugging a script in both Bash and Zsh 
#!/bin/bash -x

echo "Debugging Bash script"

इस बैश स्क्रिप्ट में, -एक्स ध्वज डिबगिंग को सक्षम बनाता है। आप Zsh में एक समान दृष्टिकोण का उपयोग कर सकते हैं; बस बदलें दे घुमा के साथ zsh .

Zsh और Bash के बीच चयन के लिए विचार

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

शेल स्क्रिप्ट का उपयोग करके कार्यों को स्वचालित करना

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

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