शेल स्क्रिप्टिंग किसी भी सिसएडमिन-प्रकार की भूमिका में किसी के लिए एक आवश्यक अनुशासन है, और वह प्रमुख शेल जिसमें लोग आज स्क्रिप्ट लिखते हैं, वह बैश है। बैश लगभग सभी लिनक्स डिस्ट्रीब्यूशन और आधुनिक MacOS संस्करणों पर डिफ़ॉल्ट रूप से आता है और जल्द ही विंडोज टर्मिनल का एक नेटिव हिस्सा बनने के लिए तैयार है। बैश, आप कह सकते हैं, हर जगह है।
तो यह इस मुकाम तक कैसे पहुंचा? इस हफ्ते का कमांड लाइन हीरोज पॉडकास्ट उन लोगों से पूछकर उस सवाल में गहराई से गोता लगाता है जिन्होंने कोड लिखा था।
यूनिक्स से शुरुआत हुई
सभी प्रोग्रामिंग चीजों की तरह, हमें यूनिक्स पर वापस जाना होगा। थोड़ा शेल इतिहास: 1971 में, केन थॉम्पसन ने पहला यूनिक्स शेल जारी किया—थॉम्पसन शेल। लेकिन उपयोगकर्ता जितनी स्क्रिप्टिंग कर सकते थे उसकी मात्रा पर गंभीर सीमाएं थीं। और इसका मतलब ऑटोमेशन के लिए गंभीर सीमाएं थीं, और नतीजतन, पूरे आईटी ऑपरेशंस क्षेत्र के लिए।
शोध का यह शानदार टुकड़ा प्रारंभिक स्क्रिप्टिंग प्रयासों की चुनौतियों को रेखांकित करता है (कमांड को हाइलाइट करने के लिए बोल्ड जोड़ा गया):
मल्टिक्स में अपने पूर्ववर्ती के समान, यह शेल (/bin/sh) एक स्वतंत्र उपयोगकर्ता प्रोग्राम था जो कर्नेल के बाहर निष्पादित होता था। ग्लोबिंग (पैरामीटर एक्सपेंशन के लिए पैटर्न मिलान, जैसे *.txt) जैसी अवधारणाओं को glob नामक एक अलग यूटिलिटी में लागू किया गया था, जैसा कि कंडीशनल एक्सप्रेशन का मूल्यांकन करने के लिए if कमांड था। इस अलगाव ने शेल को छोटा रखा, 900 लाइन्स से कम C सोर्स कोड में।
शेल ने रीडायरेक्शन (< > और >>) और पाइपिंग (| या ^) के लिए एक कॉम्पैक्ट सिंटैक्स पेश किया जो आधुनिक शेल में जीवित रहा है। आप क्रमिक कमांड ( ; के साथ) और एसिंक्रोनस कमांड ( & के साथ) को लागू करने के लिए समर्थन भी पा सकते हैं।
थॉम्पसन शेल में कमी थी स्क्रिप्ट करने की क्षमता। इसका एकमात्र उद्देश्य एक इंटरैक्टिव शेल (कमांड इंटरप्रेटर) के रूप में कमांड को लागू करना और परिणाम देखना था।
जैसे-जैसे टर्मिनल तक पहुंच बढ़ी, ऑटोमेशन में रुचि भी इसके साथ बढ़ी।
बॉर्न शेल एक कदम आगे
थॉम्पसन के रिलीज के छह साल बाद, 1977 में, स्टीफन बॉर्न ने बॉर्न शेल जारी किया, जिसका उद्देश्य थॉम्पसन शेल की स्क्रिप्टिंग सीमाओं को हल करना था। (चेत रामे, 1990 से बैश भाषा के प्राथमिक अनुरक्षक, इस एपिसोड में कमांड-लाइन हीरोज पर इसकी चर्चा करते हैं)। यह बेल लैब्स से यूनिक्स सिस्टम के हिस्से के रूप में निकलने वाली टेक्नोलॉजी का स्वाभाविक विकास था।
बॉर्न ने अलग तरीके से क्या करने का इरादा किया? शोधकर्ता एम. जोन्स इसे अच्छी तरह से रेखांकित करते हैं:
बॉर्न शेल के दो प्राथमिक लक्ष्य थे: ऑपरेटिंग सिस्टम के लिए कमांड को इंटरैक्टिव रूप से निष्पादित करने के लिए एक कमांड इंटरप्रेटर के रूप में काम करना और स्क्रिप्टिंग के लिए (पुन: प्रयोज्य स्क्रिप्ट लिखना जिन्हें शेल के माध्यम से लागू किया जा सके)। थॉम्पसन शेल को बदलने के अलावा, बॉर्न शेल ने अपने पूर्ववर्तियों पर कई फायदे दिए। बॉर्न ने स्क्रिप्ट में कंट्रोल फ्लो, लूप, और वेरिएबल पेश किए, जिससे ऑपरेटिंग सिस्टम के साथ इंटरैक्ट करने के लिए एक अधिक कार्यात्मक भाषा प्रदान की गई (इंटरैक्टिव और नॉन-इंटरैक्टिव दोनों)। शेल ने आपको शेल स्क्रिप्ट को फिल्टर के रूप में उपयोग करने की भी अनुमति दी, सिग्नल को संभालने के लिए एकीकृत समर्थन प्रदान किया, लेकिन फंक्शन को परिभाषित करने की क्षमता का अभाव था। अंत में, इसमें कई विशेषताएं शामिल थीं जिनका हम आज उपयोग करते हैं, जिसमें कमांड सब्स्टीट्यूशन (बैक कोट्स का उपयोग करके) और स्क्रिप्ट के भीतर संरक्षित स्ट्रिंग लिटरल को एम्बेड करने के लिए HERE डॉक्यूमेंट शामिल हैं।
बॉर्न ने पिछले एक साक्षात्कार में इसका वर्णन इस तरह किया:
मूल शेल वास्तव में एक भाषा नहीं थी; यह एक रिकॉर्डिंग थी—एक फाइल से कमांड के एक रैखिक अनुक्रम को निष्पादित करने का एक तरीका, एकमात्र कंट्रोल फ्लो प्रिमिटिव एक लेबल पर GOTO होना। केन थॉम्पसन द्वारा लिखे गए मूल शेल की ये सीमाएं महत्वपूर्ण थीं। आप उदाहरण के लिए, एक कमांड स्क्रिप्ट को फिल्टर के रूप में आसानी से उपयोग नहीं कर सकते थे क्योंकि कमांड फाइल स्वयं स्टैंडर्ड इनपुट थी। और एक फिल्टर में, स्टैंडर्ड इनपुट वह है जो आप अपने पैरेंट प्रोसेस से इनहेरिट करते हैं, न कि कमांड फाइल।
मूल शेल सरल था लेकिन, जैसे-जैसे लोग यूनिक्स का उपयोग एप्लिकेशन डेवलपमेंट और स्क्रिप्टिंग के लिए करने लगे, यह बहुत सीमित था। इसमें वेरिएबल नहीं थे, इसमें कंट्रोल फ्लो नहीं था, और इसमें बहुत अपर्याप्त कोटिंग क्षमताएं थीं।
यह नया शेल स्क्रिप्टर्स के लिए एक बड़ा कदम आगे था, लेकिन केवल तभी अगर आपके पास इसकी पहुंच थी।
बॉर्न के शेल को फ्री सॉफ्टवेयर के रूप में पुनर्विचार करना
तब तक, प्रमुख शेल मालिकाना सॉफ्टवेयर थे जो बेल लैब्स के स्वामित्व और संचालन में थे। यदि आप भाग्यशाली थे, तो आपके विश्वविद्यालय के पास यूनिक्स शेल तक पहुंच हो सकती है। लेकिन वह प्रतिबंधित पहुंच उस दुनिया से बहुत दूर थी जिसे फ्री सॉफ्टवेयर फाउंडेशन (FSF) हासिल करना चाहता था।
रिचर्ड स्टॉलमैन और समान विचारधारा वाले डेवलपर्स का एक समूह यूनिक्स की सभी विशेषताओं को एक लाइसेंस के साथ लिख रहा था जो GNU लाइसेंस के तहत स्वतंत्र रूप से उपलब्ध है। उन डेवलपर्स में से एक को शेल बनाने का काम सौंपा गया था। वह डेवलपर ब्रायन फॉक्स थे। और जिस तरह से वह अपने कार्य के बारे में बात करते हैं वह मुझे बिल्कुल मोहित करता है। जैसा कि वह पॉडकास्ट पर कहते हैं:
यह इतना चुनौतीपूर्ण था क्योंकि हमें बॉर्न शेल के सभी व्यवहारों को वफादारी से नकल करना था, जबकि साथ ही इसे एक बेहतर उपकरण बनाने के लिए विस्तारित करने की अनुमति दी गई थी।
यह वह समय भी था जब लोग चर्चा कर रहे थे कि शेल स्टैंडर्ड होने का क्या मतलब है। इस इतिहास को पृष्ठभूमि में और प्रतिस्पर्धा को अग्रभूमि में रखते हुए, लोकप्रिय बॉर्न शेल की पुनर्कल्पना की गई; पुनर्जन्म हुआ।
शेल, बॉर्न-अगेन
ये दो उत्प्रेरक—फ्री सॉफ्टवेयर मिशन और प्रतिस्पर्धा—बॉर्न-अगेन शेल (बैश) को जीवन में लाए। उस समय के लिए एक असामान्य कदम में, फॉक्स ने अपने शेल का नाम अपने नाम पर नहीं रखा, और उन्होंने यूनिक्स से फ्री सॉफ्टवेयर में विकास पर ध्यान केंद्रित किया। (हालांकि फॉक्स शेल फिश शेल से पहले fsh कमांड को हरा सकता था #missedopportunity)। वह नामकरण पसंद उनके व्यक्तित्व के अनुरूप लगता है। जैसा कि फॉक्स एपिसोड में कहते हैं, उन्हें व्यक्तिगत गौरव की धारणा में भी कोई दिलचस्पी नहीं थी; वह प्रोग्रामिंग की संस्कृति को विकसित करने में मदद करने की कोशिश कर रहे थे। वह, हालांकि, एक अच्छे पन से ऊपर नहीं थे।
यह सुनकर अच्छा लगा कि बॉर्न शब्दों के खेल से आहत महसूस नहीं करते। बॉर्न एक कहानी बताते हैं जब कोई उनके पास आया और एक सम्मेलन में उन्हें एक बैश टी-शर्ट दी। वह व्यक्ति ब्रायन फॉक्स था।
| शेल | रिलीज़ | निर्माता |
|---|---|---|
| थॉम्पसन शेल | 1971 | केन थॉम्पसन |
| बॉर्न शेल | 1977 | स्टीफन बॉर्न |
| बॉर्न-अगेन शेल | 1989 | ब्रायन फॉक्स |
समय के साथ, बैश को अपनाया जाने लगा। अन्य इंजीनियरों ने इसका उपयोग करना शुरू किया और इसके डिजाइन में सुधार प्रस्तुत किए। वास्तव में, सालों बाद, फॉक्स इस बात पर जोर देंगे कि बैश का नियंत्रण छोड़ना सीखना उनके जीवन की सबसे महत्वपूर्ण चीजों में से एक थी। जैसे-जैसे यूनिक्स ने लिनक्स और ओपन सोर्स सॉफ्टवेयर आंदोलन का रास्ता दिया, बैश एक ओपन सोर्स दुनिया में प्रमुख स्क्रिप्टिंग शक्ति बन गया। महान परियोजनाएं एक व्यक्ति की दृष्टि के दायरे से परे विकसित होती प्रतीत होती हैं।
शेल से हम क्या सीख सकते हैं?
एक शेल एक ऐसी तकनीक है जो रोजमर्रा के लैपटॉप उपयोग के लिए इतनी अभिन्न है कि यह भूलना आसान है कि इसे आविष्कार की आवश्यकता थी। थॉम्पसन से बॉर्न से बैश शेल तक जाने की कहानी कुछ परिचित निष्कर्ष निकालती है:
- सही मिशन के साथ प्रेरित व्यक्ति महान प्रगति कर सकते हैं।
- हम आज जिस बहुत कुछ पर भरोसा करते हैं वह हमारे उद्योग में अभी भी जीवित दिग्गजों के काम पर बनाया गया है।
- जो सॉफ्टवेयर जीवित रहने की प्रवृत्ति रखते हैं वे वे हैं जो अपने मूल रचनाकारों की दृष्टि से परे विकसित होते हैं।
कमांड लाइन हीरोज ने सीजन 3 के लिए सभी प्रोग्रामिंग भाषाओं को कवर किया है और अपने फिनाले के करीब पहुंच रहा है। आप जो कुछ भी प्रोग्रामिंग भाषाओं की उत्पत्ति के बारे में जानना चाहते हैं उसे सीखने के लिए सब्सक्राइब करना सुनिश्चित करें, और मुझे नीचे टिप्पणियों में अपनी शेल कहानियां सुनना अच्छा लगेगा।