यदि आप अपने Mac के Terminal में एक छोटा कमांड दोहराते हैं, तो एक alias ही काफी हो सकता है। यदि कार्य के लिए आर्ग्युमेंट्स, कई चरणों, निर्णयों या आपके इंटरैक्टिव शेल से बाहर उपयोग की आवश्यकता है, तो एक स्क्रिप्ट लिखें। बीच की स्थिति के लिए—विशेष रूप से ऐसा कमांड जिसे आर्ग्युमेंट्स की आवश्यकता हो लेकिन उसे वर्तमान शेल की डायरेक्टरी बदलनी चाहिए—एक zsh फ़ंक्शन पर विचार करें। यह गाइड आपको इस आधार पर चुनने में मदद करती है कि कमांड को क्या करना है और आपको इसके काम करने की आवश्यकता कहाँ है।
macOS पर alias क्या करता है
एक alias एक छोटा नाम होता है जिसे zsh आपके टाइप करते ही कमांड टेक्स्ट में विस्तृत कर देता है। उदाहरण के लिए, यदि आप अक्सर git status चलाते हैं, तो आप ~/.zshrc में alias gs='git status' जोड़ सकते हैं। Apple ने zsh को Terminal के डिफ़ॉल्ट शेल के रूप में प्रलेखित किया है, हालांकि Mac के शेल को बदला जा सकता है, इसलिए यदि कोई alias अपेक्षा के अनुसार काम नहीं करता है तो अपना सेटअप जांचें। Apple का Terminal गाइड
जब प्रतिस्थापन अनिवार्य रूप से निश्चित हो तब alias का उपयोग करें: एक छोटी स्पेलिंग, एक मानक विकल्प, या एक सरल कमांड जिसे आप इंटरैक्टिव रूप से चलाते हैं। इसे संपादित करना या हटाना आसान है, और जब आप परिभाषा का निरीक्षण करते हैं तो यह पूरी क्रिया को दृश्यमान रखता है। zsh में, aliases पैरामीटर के रूप में आर्ग्युमेंट्स नहीं लेते हैं; वे केवल टेक्स्ट प्रतिस्थापन होते हैं। यह उस समय alias को अनुपयुक्त बनाता है जब आपको क्रिया में कोई पाथ या अन्य बदलता हुआ मान पास करने की आवश्यकता होती है। Aliases के लिए Zsh उपयोगकर्ता गाइड
Aliases शेल पार्सिंग और स्टार्टअप से भी जुड़े होते हैं। ~/.zshrc से लोड की गई परिभाषा एक इंटरैक्टिव Terminal सत्र में उपयोगी होती है, लेकिन आपको यह मानकर नहीं चलना चाहिए कि कोई अन्य प्रोग्राम, गैर-इंटरैक्टिव शेल, या कोई स्क्रिप्ट उस फ़ाइल को पढ़ेगी और उस alias को पहचानेगी। यदि कमांड को विभिन्न संदर्भों से विश्वसनीयता के साथ कॉल करने की आवश्यकता है, तो एक स्क्रिप्ट या किसी अन्य स्पष्ट कमांड इंटरफ़ेस का उपयोग करें।
स्क्रिप्ट कब अधिक उपयुक्त होती है
जब दोहराया जाने वाला कार्य एक निश्चित कमांड के बजाय एक छोटी प्रक्रिया हो, तो स्क्रिप्ट चुनें। इसके संकेतों में कई चरण, आर्ग्युमेंट्स, जांच (checks), ब्रांचिंग, स्पष्ट सफलता या विफलता का व्यवहार, या इसे पाथ द्वारा या किसी अन्य टूल से इनवोक करने की आवश्यकता शामिल है। Apple शेल स्क्रिप्ट का वर्णन कमांड-लाइन टूल्स को संयोजित करने, आर्ग्युमेंट्स को संभालने और परिणाम कोड के आधार पर निर्णय लेने के तरीके के रूप में करता है। शेल स्क्रिप्ट में डायलेक्ट (बोली) के अंतर भी होते हैं, इसलिए यह मानने के बजाय कि प्रत्येक शेल एक ही सिंटैक्स को पढ़ता है, इंटरप्रेटर को चुनें और प्रलेखित करें। Apple का Shell Scripting Primer
उदाहरण के लिए, यदि कोई रूटीन इनपुट के रूप में एक प्रोजेक्ट फ़ोल्डर लेता है, यह जांचता है कि वह मौजूद है या नहीं, और फिर वहां वही क्रम चलाता है, तो एक स्क्रिप्ट उस इनपुट को स्पष्ट बना सकती है और चरणों को एक पठनीय क्रम में रख सकती है। फ़ाइलों को हटाने या अधिलेखित (overwrite) करने जैसे परिवर्तनों को स्वचालित करने से पहले, जांच जोड़ें और विफलता व्यवहार को स्पष्ट करें। एक शेल स्क्रिप्ट अपने स्वयं के निष्पादन संदर्भ (execution context) में एक कमांड के रूप में चलती है; इसके अंदर डायरेक्टरी बदलने पर कॉलिंग Terminal शेल की डायरेक्टरी बदलने के लिए भरोसा नहीं किया जाना चाहिए। Zsh कॉलिंग शेल में फ़ंक्शन निष्पादन से अलग स्क्रिप्ट कमांड निष्पादन का दस्तावेज़ीकरण करता है। Zsh कमांड निष्पादन
एक स्क्रिप्ट अपने आप अधिक सुरक्षित या अधिक पोर्टेबल नहीं होती है। यह बनाए रखने के लिए एक अतिरिक्त फ़ाइल है, और इसका व्यवहार इसके इंटरप्रेटर, Mac पर उपलब्ध कमांड, अनुमतियों और पाथ या इनपुट के बारे में मान्यताओं पर निर्भर करता है। Apple का प्राइमर विशेष रूप से चेतावनी देता है कि शेल डायलेक्ट और प्लेटफ़ॉर्म यूटिलिटी के अंतर विफलताओं का कारण बन सकते हैं। स्क्रिप्ट्स को सीमित रखें, जहां उचित हो वहां वेरिएबल एक्सपैंशन को कोट (quote) करें, और मूल्यवान डेटा पर उनका उपयोग करने से पहले सुरक्षित नमूना इनपुट के साथ उनका परीक्षण करें।
बीच की स्थिति के लिए zsh फ़ंक्शन का उपयोग करें
यदि आपको अपने वर्तमान Terminal शेल में पुन: प्रयोज्य तर्क (reusable logic) और आर्ग्युमेंट्स की आवश्यकता है, लेकिन एक अलग फ़ाइल की आवश्यकता नहीं है, तो एक फ़ंक्शन अक्सर सबसे अच्छा विकल्प होता है। उदाहरण के लिए, एक फ़ंक्शन डायरेक्टरी आर्ग्युमेंट स्वीकार कर सकता है, उसे सत्यापित कर सकता है, और फिर उसमें cd कर सकता है; चूँकि zsh फ़ंक्शन कॉलर की शेल प्रक्रिया में चलते हैं, इसलिए वह डायरेक्टरी परिवर्तन इंटरैक्टिव सत्र में बना रहता है। Zsh प्रलेखित करता है कि फ़ंक्शन आर्ग्युमेंट्स प्राप्त करते हैं और कॉलर के समान ही प्रोसेस में निष्पादित होते हैं। Zsh फ़ंक्शन
जब आप इसे इंटरैक्टिव Terminal सत्रों में उपलब्ध कराना चाहते हों तो ~/.zshrc में एक फ़ंक्शन परिभाषित करें। स्क्रिप्ट को तब प्राथमिकता दें जब क्रिया को एक अलग कमांड के रूप में काम करना चाहिए, टूल्स या अन्य स्क्रिप्ट द्वारा कॉल किया जाना चाहिए, या एक फ़ाइल के रूप में साझा करना आसान होना चाहिए। जब आप केवल एक निश्चित कमांड लाइन के लिए एक यादगार नाम चाहते हैं, तो एक alias को प्राथमिकता दें।
एक त्वरित निर्णय परीक्षण
पूछें कि यदि आप कार्य को दोबारा चलाते हैं तो क्या बदलेगा। यदि कमांड के नाम के अलावा कुछ नहीं बदलता है, तो एक alias का उपयोग करें। यदि हर बार कोई मान बदलता है, जैसे कि कोई फ़ोल्डर या फ़ाइल नाम, तो ऐसे फ़ंक्शन या स्क्रिप्ट का उपयोग करें जो इसे स्वीकार करता हो। यदि कार्य में कई चरण या निर्णय हैं, तो एक स्क्रिप्ट का उपयोग करें। यदि इसे वर्तमान Terminal सत्र को बदलना चाहिए, जैसे कि इसकी कार्यशील डायरेक्टरी (working directory), तो एक फ़ंक्शन का उपयोग करें।
फिर जांचें कि आपको कमांड की आवश्यकता कहाँ है। केवल Terminal में? ~/.zshrc में एक alias या फ़ंक्शन उपयुक्त हो सकता है। अलग से इनवोक करने योग्य कमांड? उपयुक्त इंटरप्रेटर और सुविचारित अनुमतियों के साथ एक स्क्रिप्ट का उपयोग करें। किसी अन्य Mac के साथ साझा करना है? मान्यताओं और आवश्यक टूल्स को प्रलेखित करें; कोई शेल स्क्रिप्ट केवल इसलिए अपने आप पोर्टेबल नहीं हो जाती क्योंकि वह Terminal में चलती है।
उपयोगी विभाजन रेखा कार्य का इंटरफ़ेस है: aliases निश्चित कमांड टेक्स्ट का नाम बदलते हैं, फ़ंक्शन वर्तमान शेल के अंदर पुन: प्रयोज्य व्यवहार जोड़ते हैं, और स्क्रिप्ट एक प्रक्रिया को एक अलग कमांड के रूप में पैक करती हैं। उन आवश्यकताओं को पूरा करने वाले सबसे सरल विकल्प से शुरुआत करें, और जब आर्ग्युमेंट्स, तर्क, या जहां कमांड चलना चाहिए, alias को असुविधाजनक बना दें, तो फ़ंक्शन या स्क्रिप्ट पर स्विच करें।
स्रोत
Mac पर Terminal में डिफ़ॉल्ट शेल बदलें — Apple Support
Shell Scripting Primer: परिचय — Apple Developer
कमांड निष्पादन — Zsh
फ़ंक्शन्स — Zsh