Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình Bash

Xonsh: Kết Hợp Sức Mạnh Python Với Năng Suất Shell

Ngôn ngữ shell rất hữu ích cho việc sử dụng tương tác. Tuy nhiên, sự tối ưu hóa này thường đi kèm với sự đánh đổi khi dùng chúng như ngôn ngữ lập trình, điều mà đôi khi ta cảm thấy khi viết script shell.

Điều gì sẽ xảy ra nếu shell của bạn cũng hiểu một ngôn ngữ lập trình có khả năng mở rộng hơn? Ví dụ như Python?

Đó chính là Xonsh.

Cài đặt Xonsh đơn giản như việc tạo môi trường ảo, chạy pip install xonsh[ptk,linux], sau đó chạy xonsh.

Ban đầu, bạn có thể thắc mắc tại sao shell Python của mình lại có một dấu nhắc lạ:

$ 1+1
2

Máy tính bỏ túi不错!

$ print("hello world")
hello world

Chúng ta cũng có thể gọi các hàm khác:

$ from antigravity import geohash
$ geohash(37.421542, -122.085589, b'2005-05-26-10458.68')
37.857713 -122.544543

Tuy nhiên, chúng ta vẫn có thể sử dụng nó như một shell thông thường:

$ echo "hello world"
hello world

Thậm chí có thể kết hợp cả hai!

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

Xonsh hỗ trợ tự động hoàn thành cho cả lệnh shell và biểu thức Python bằng cách sử dụng Prompt Toolkit. Các gợi ý hoàn thành hiển thị trực quan, cho thấy các khả năng hoàn thành và có danh sách thả xuống trong băng.

Nó cũng hỗ trợ truy cập biến môi trường. Xonsh sử dụng một heuristic đơn giản nhưng mạnh mẽ để áp dụng các kiểu Python cho biến môi trường. Mặc định là "chuỗi", nhưng ví dụ biến đường dẫn tự động là danh sách.

$ '/usr/bin' in $PATH
True

Xonsh chấp nhận cả toán tử boolean kiểu shell và kiểu 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

Điều này có nghĩa là các từ khóa Python được thông dịch. Nếu muốn in tiêu đề cuốn sách nổi tiếng của Dr. Seuss, ta cần đặt từ khóa trong ngoặc kép.

$ echo green eggs "and" ham
green eggs and ham

Nếu không, bạn sẽ bị "ngạc nhiên":

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

Môi trường ảo có thể hơi rắc rối. Môi trường ảo thông thường, phụ thuộc vào cú pháp kiểu Bash, không thể hoạt động. Tuy nhiên, Xonsh đi kèm hệ thống quản lý môi trường ảo riêng gọi là vox.

vox có thể tạo, kích hoạt và hủy kích hoạt môi trường trong ~/.virtualenvs; nếu bạn đã dùng virtualenvwrapper, đây chính là nơi các môi trường được lưu.

Lưu ý rằng môi trường hiện đang kích hoạt không ảnh hưởng đến xonsh. Nó không thể import bất cứ thứ gì từ môi trường đã kích hoạt.

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

Dòng đầu tiên kích hoạt vox: nó là một xontrib, một tiện ích mở rộng của bên thứ ba cho Xonsh. Trình quản lý xontrib có thể liệt kê tất cả xontribs có thể và trạng thái hiện tại (đã cài đặt, đã tải, hoặc chưa).

Có thể viết một xontrib và tải lên PyPi để cung cấp. Tuy nhiên, cách tốt nhất là thêm nó vào chỉ mục xontrib để Xonsh biết trước. Điều này cho phép, ví dụ, trình hướng dẫn cấu hình gợi ý nó.

Nếu bạn từng tự hỏi, "Python có thể là shell của tôi không?" thì bạn chỉ cách một lệnh pip install xonsh để tìm ra câu trả lời.