शेल भाषाएं इंटरैक्टिव उपयोग के लिए उपयोगी होती हैं। लेकिन यह अनुकूलन अक्सर उन्हें प्रोग्रामिंग भाषा के रूप में उपयोग करने के विरुद्ध ट्रेड-ऑफ के साथ आता है, जो कभी-कभी शेल स्क्रिप्ट लिखते समय महसूस होता है।
क्या होगा अगर आपका शेल एक अधिक स्केलेबल प्रोग्रामिंग भाषा को भी समझे? मान लीजिए, पायथन?
यहीं Xonsh आता है।
Xonsh इंस्टॉल करना उतना ही सरल है जितना एक वर्चुअल एनवायरनमेंट बनाना, pip install xonsh[ptk,linux] चलाना, और फिर xonsh चलाना।
पहले, आप सोच सकते हैं कि आपके पायथन शेल में एक अजीब प्रॉम्प्ट क्यों है:
$ 1+1
2
अच्छा कैलकुलेटर!
$ print("hello world")
hello world
हम अन्य फंक्शन भी कॉल कर सकते हैं:
$ from antigravity import geohash
$ geohash(37.421542, -122.085589, b'2005-05-26-10458.68')
37.857713 -122.544543
हालांकि, हम अभी भी इसे एक रेगुलर शेल की तरह उपयोग कर सकते हैं:
$ echo "hello world"
hello world
हम तो मिक्स एंड मैच भी कर सकते हैं!
$ for i in range(3):
. echo "hello world"
.
hello world
hello world
hello world
Xonsh, Prompt Toolkit का उपयोग करके शेल कमांड और पायथन एक्सप्रेशन दोनों के लिए कम्पलीशन सपोर्ट करता है। कम्पलीशन विजुअली इन्फॉर्मेटिव होते हैं, संभावित कम्पलीशन दिखाते हैं और इन-बैंड ड्रॉपडाउन सूचियाँ होती हैं।
यह एनवायरनमेंट एक्सेस को भी सपोर्ट करता है। यह एनवायरनमेंट वेरिएबल्स पर पायथन टाइप लागू करने के लिए एक सरल लेकिन शक्तिशाली हीयुरिस्टिक का उपयोग करता है। डिफ़ॉल्ट "स्ट्रिंग" है, लेकिन उदाहरण के लिए, पाथ वेरिएबल्स ऑटोमैटिकली लिस्ट होते हैं।
$ '/usr/bin' in $PATH
True
Xonsh या तो शेल-स्टाइल या पायथन-स्टाइल बूलियन शॉर्टकट ऑपरेटर्स स्वीकार करता है:
$ cat things
foo
$ grep -q foo things and echo "found"
found
$ grep -q bar things && echo "found"
$ grep -q foo things or echo "found"
$ grep -q bar things || echo "found"
found
इसका मतलब है कि पायथन कीवर्ड इंटरप्रेट किए जाते हैं। अगर हम डॉ. सिअस की प्रसिद्ध किताब का शीर्षक प्रिंट करना चाहते हैं, तो हमें कीवर्ड को कोट करना होगा।
$ echo green eggs "and" ham
green eggs and ham
अगर हम ऐसा नहीं करते, तो हमें सरप्राइज मिलता है:
$ echo green eggs and ham
green eggs
xonsh: For full traceback set: $XONSH_SHOW_TRACEBACK = True
xonsh: subprocess mode: command not found: ham
Did you mean one of the following?
as: Command (/usr/bin/as)
ht: Command (/usr/bin/ht)
mag: Command (/usr/bin/mag)
ar: Command (/usr/bin/ar)
nm: Command (/usr/bin/nm)
वर्चुअल एनवायरनमेंट थोड़े ट्रिकी हो सकते हैं। रेगुलर वर्चुअल एनवायरनमेंट, चूंकि वे बैश-जैसे सिंटैक्स पर निर्भर करते हैं, काम नहीं कर सकते। हालांकि, Xonsh अपने स्वयं के वर्चुअल एनवायरनमेंट मैनेजमेंट सिस्टम vox के साथ आता है।
vox ~/.virtualenvs में एनवायरनमेंट बना, एक्टिवेट और डीएक्टिवेट कर सकता है; अगर आपने virtualenvwrapper उपयोग किया है, तो यहीं एनवायरनमेंट थे।
ध्यान दें कि वर्तमान एक्टिवेटेड एनवायरनमेंट xonsh को प्रभावित नहीं करता। यह एक्टिवेटेड एनवायरनमेंट से कुछ भी इम्पोर्ट नहीं कर सकता।
$ xontrib load vox
$ vox create my-environment
...
$ vox activate my-environment
Activated "my-environment".
$ pip install money
...
$ python
...
>>> import money
>>> money.Money('3.14')
$ import money
xonsh: For full traceback set: $XONSH_SHOW_TRACEBACK = True
ModuleNotFoundError: No module named 'money'
पहली लाइन vox को इनेबल करती है: यह एक xontrib है, Xonsh के लिए एक थर्ड-पार्टी एक्सटेंशन। xontrib मैनेजर सभी संभावित xontribs और उनकी वर्तमान स्थिति (इंस्टॉल्ड, लोडेड, या न तो) सूचीबद्ध कर सकता है।
xontrib लिखना और इसे PyPi पर अपलोड करना संभव है ताकि यह उपलब्ध हो जाए। हालांकि, इसे xontrib इंडेक्स में जोड़ना अच्छी प्रैक्टिस है ताकि Xonsh को इसके बारे में पहले से पता चल सके। यह उदाहरण के लिए, कॉन्फ़िगरेशन विज़ार्ड को इसे सुझाने की अनुमति देता है।
अगर आपने कभी सोचा है, "क्या पायथन मेरा शेल हो सकता है?" तो आप केवल एक pip install xonsh दूर हैं इसका पता लगाने के लिए।