শেল ভাষাগুলো ইন্টারেক্টিভ ব্যবহারের জন্য খুবই সুবিধাজনক। কিন্তু এই অপ্টিমাইজেশন প্রায়শই প্রোগ্রামিং ভাষা হিসেবে ব্যবহার করার সাথে ট্রেড-অফ এনে দেয়, যা শেল স্ক্রিপ্ট লিখার সময় অনুভব করা যায়।
কি হব যদি আপনার শেলও একটি আরও স্কেলেবল প্রোগ্রামিং ভাষা বুঝতে পারে? মানে, পাইথন?
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 প্রম্পট টুলকিট ব্যবহার করে শেল কমান্ড এবং পাইথন এক্সপ্রেশনের উভয়কেই কমপ্লিশন সমর্থন করে। কমপ্লিশনগুলো দৃষ্টিগতভাবে তথ্যপূর্ণ, সম্ভাব্য কমপ্লিশন দেখায় এবং ইন-ব্যান্ড ড্রপডাউন লিস্ট থাকে।
এটি এনভায়রনমেন্ট অ্যাক্সেসও সমর্থন করে। এনভায়রনমেন্ট ভেরিয়েবলগুলোর পাইথন টাইপ প্রয়োগ করার জন্য এটি একটি সহজ কিন্তু শক্তিশালী হিউরিস্টিক ব্যবহার করে। ডিফল্ট হলো "স্ট্রিং", কিন্তু পথ ভেরিয়েবলগুলো স্বয়ংক্রিয়ভাবে লিস্ট হয়ে যায়।
$ '/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)
ভার্চুয়াল এনভায়রনমেন্টগুলো কিছুটা জটিল হতে পারে। ব্যাকtick-নির্ভর বাশ-লাইক সিনট্যাক্সের কারণে সাধারণ ভার্চুয়াল এনভায়রনমেন্ট কাজ করে না। তবে 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 ম্যানেজার সব সম্ভাব্য xontrib-গুলো এবং তাদের বর্তমান অবস্থা (ইনস্টলড, লোডেড, অথবা কোনোটিই না) লিস্ট করতে পারে।
একটি xontrib লিখে সেটি PyPi-এ আপলোড করা সম্ভব যাতে এটি উপলব্ধ হয়। তবে ভালো অভ্যাস হলো এটিকে xontrib ইনডেক্সে যোগ করা যাতে Xonsh আগে থেকে সেটি সম্পর্কে জানে। এটি কনফিগারেশন উইজার্ডকে সাজেস্ট করার মতো সুবিধা দেয়।
আপনি যদি কখনো ভাবেন, "কি পাইথন আমার শেল হতে পারে?" তবে আপনি শুধু pip install xonsh দূরত্বে আছেন জানতে।