Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม Bash

Xonsh: ผสานพลังของ Python กับประสิทธิภาพของ Shell

ภาษา Shell มีประโยชน์สำหรับการใช้งานแบบโต้ตอบ แต่การเพิ่มประสิทธิภาพนี้มักมาพร้อมกับการแลกเปลี่ยนกับความสามารถในการใช้เป็นภาษาโปรแกรมมิ่ง ซึ่งอาจสัมผัสได้เมื่อเขียน Shell script

ลองจินตนาการดูว่า: ถ้า Shell ของคุณเข้าใจภาษาโปรแกรมมิ่งที่ขยายได้มากกว่านี้ได้อย่างไร? เช่น Python?

นี่คือ Xonsh

การติดตั้ง Xonsh ง่ายเพียงแค่สร้าง Virtual Environment รัน pip install xonsh[ptk,linux] แล้วตามด้วย xonsh

ตอนแรกคุณอาจสงสัยว่าไพธอน Shell ของคุณมีพรอมต์แปลกๆ:

$ 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

อย่างไรก็ตาม เรายังใช้งานได้เหมือน Shell ปกติ:

$ echo "hello world"
hello world

เรายังผสมผสานได้!

$ for i in range(3):
. echo "hello world"
.
hello world
hello world
hello world

Xonsh รองรับการเติมอัตโนมัติ (Completion) สำหรับคำสั่ง Shell และนิพจน์ Python โดยใช้ Prompt Toolkit การเติมอัตโนมัติแสดงข้อมูลทางสายตา พร้อมรายการแบบดรอปดาวน์ในบैंड (In-band dropdown lists)

นอกจากนี้ยังรองรับการเข้าถึง Environment ใช้ฮิวริสติกที่เรียบง่ายแแรงในการนำประเภทข้อมูล Python ไปใช้กับตัวแปร Environment ค่าเริ่มต้นคือ "string" แต่ตัวแปรเส้นทาง (Path variables) จะเป็น List อัตโนมัติ

$ '/usr/bin' in $PATH
True

Xonsh รองรับตัวดำเนินการ Boolean แบบ Short-circuit ทั้งสไตล์ Shell และ Python:

$ 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

หมายความว่า Keyword ของ Python จะถูกตีความ หากเราต้องการพิมพ์ชื่อหนังสือดังของ Dr. Seuss เราต้องใส่เครื่องหมายคำพูดครอบ Keyword

$ 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)

Virtual Environment อาจซับซ้อนนิดหน่อย Virtual Environment ปกติที่พึ่งพาไวยากรณ์แบบ Bash ไม่สามารถทำงานได้ แต่ Xonsh มาพร้อมระบบจัดการ Virtual Environment ของตัวเองชื่อ vox

vox สร้าง เปิดใช้งาน และปิดใช้งาน Environment ใน ~/.virtualenvs หากเคยใช้ virtualenvwrapper นี่คือที่ตั้งของ Environment

โปรดสังเกตว่า Environment ที่เปิดใช้งานอยู่ไม่ส่งผลต่อ xonsh มันไม่สามารถ Import อะไรจาก Environment ที่เปิดใช้งานได้

$ 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 รู้จักล่วงหน้า ซึ่งทำให้ Wizard การตั้งค่าสามารถแนะนำได้

หากเคยสงสัยว่า "Python สามารถเป็น Shell ของฉันได้ไหม?" คุณอยู่ห่างจากคำตอบเพียง pip install xonsh เท่านั้น