Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม BASH

ทำไมฉันถึงรักXonsh

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

จะเกิดอะไรขึ้นถ้าเชลล์ของคุณเข้าใจภาษาการเขียนโปรแกรมที่ปรับขนาดได้มากขึ้นด้วย พูดสิ ไพธอน?

ป้อน Xonsh

การติดตั้ง Xonsh นั้นง่ายพอๆ กับการสร้างสภาพแวดล้อมเสมือน การรัน pip install xonsh[ptk,linux] แล้วเรียกใช้ xonsh .

ในตอนแรก คุณอาจสงสัยว่าทำไม Python 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

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

$ echo "hello world"
hello world

มิกซ์แอนด์แมทช์ได้ด้วยนะ!

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

Xonsh รองรับการเสร็จสิ้นสำหรับทั้งคำสั่งเชลล์และนิพจน์ Python โดยใช้ Prompt Toolkit เสร็จสิ้นเป็นข้อมูลทางสายตา แสดงให้เห็นความสำเร็จที่เป็นไปได้และมีรายการดรอปดาวน์ในวง

นอกจากนี้ยังสนับสนุนการเข้าถึงสภาพแวดล้อม มันใช้ฮิวริสติกที่เรียบง่ายแต่ทรงพลังสำหรับการนำประเภท Python ไปใช้กับตัวแปรสภาพแวดล้อม ค่าเริ่มต้นคือ "สตริง" แต่ตัวอย่างเช่น ตัวแปรพาธจะแสดงรายการโดยอัตโนมัติ

$ '/usr/bin' in $PATH
True

Xonsh ยอมรับตัวดำเนินการทางลัดบูลีนแบบเชลล์หรือแบบ 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

ซึ่งหมายความว่ามีการตีความคีย์เวิร์ด Python หากเราต้องการพิมพ์ชื่อหนังสือ Dr. Seuss ที่มีชื่อเสียง เราต้องอ้างอิงคำหลัก

$ 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 , นี่คือสภาพแวดล้อม

โปรดทราบว่าสภาพแวดล้อมที่เปิดใช้งานปัจจุบันไม่มีผลกับ x onsh . ไม่สามารถนำเข้าอะไรจากสภาพแวดล้อมที่เปิดใช้งานได้

$ 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 ทราบล่วงหน้า ตัวอย่างเช่น ตัวช่วยสร้างการกำหนดค่าสามารถแนะนำได้

หากคุณเคยสงสัยว่า "Python เป็นเชลล์ของฉันได้ไหม" ถ้าอย่างนั้นคุณก็เป็นเพียง pip install xonsh ห่างไกลจากการค้นพบ