Computer >> Máy Tính >  >> Lập trình >> Lập trình BASH

Tại sao tôi yêu Xonsh

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

Điều gì sẽ xảy ra nếu trình bao của bạn cũng hiểu một ngôn ngữ lập trình có thể mở rộng hơn? Nói, Python?

Nhập Xonsh.

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

Lúc đầu, bạn có thể thắc mắc tại sao trình bao Python của bạn có một dấu nhắc kỳ lạ:

$ 1+1
2

Máy tính đẹp!

$ 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

Chúng tôi thậm chí có thể trộn và kết hợp!

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

Xonsh hỗ trợ hoàn thành cho cả lệnh shell và biểu thức Python bằng cách sử dụng Bộ công cụ nhắc. Các hoàn thành có nhiều thông tin trực quan, hiển thị các hoàn thành có thể hoàn thành và có danh sách thả xuống trong nhóm.

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

$ '/usr/bin' in $PATH
True

Xonsh chấp nhận toán tử lối tắt boolean kiểu shell hoặc 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 chúng tôi muốn in tiêu đề của một cuốn sách nổi tiếng của Tiến sĩ Seuss, chúng tôi cần phải trích dẫn các từ khóa.

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

Nếu không, chúng tôi rất 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 phức tạp. Môi trường ảo thông thường, phụ thuộc vào cú pháp giống Bash, không thể hoạt động. Tuy nhiên, Xonsh đi kèm với hệ thống quản lý môi trường ảo riêng có tên 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 đã sử dụng virtualenvwrapper , đây là nơi có môi trường.

Lưu ý rằng môi trường được kích hoạt hiện tại không ảnh hưởng đến x onsh . Nó không thể nhập bất kỳ 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 cho phép vox :nó là một xontrib , một tiện ích mở rộng của bên thứ ba dành cho Xonsh. xontrib người quản lý có thể liệt kê tất cả các xontribs có thể và trạng thái hiện tại của chúng (đã cài đặt, đã tải hoặc không).

Có thể viết xontrib và chỉ cần tải nó lên PyPi để làm cho nó có sẵn. Tuy nhiên, bạn nên thêm nó vào xontrib chỉ mục để Xonsh biết trước về nó. Ví dụ, điều này cho phép trình hướng dẫn cấu hình đề xuất nó.

Nếu bạn đã từng tự hỏi, "liệu Python có thể là vỏ của tôi không?" thì bạn chỉ là một pip install xonsh khỏi phải tìm hiểu.