我為什麼喜歡 Xonsh
Shell 語言對互動式使用很有用。但是在使用它們作為編程語言時這種優化就需要權衡,有時在編寫 shell 腳本時會感覺到這點。
如果你的 shell 也能理解一種更可伸縮的語言會怎樣?比如說,Python?
進入 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
然而,我們仍然可以像常規 shell 一樣使用它:
$ echo "hello world"
hello world
我們甚至可以混搭!
$ for i in range(3):
. echo "hello world"
.
hello world
hello world
hello world
Xonsh 支持使用 Prompt Toolkit 補全 shell 命令和 Python 表達式。補全有可視化提示,會顯示可能的補全並有下拉列表。
它還支持訪問環境變數。它使用簡單但強大的啟發式方法將 Python 類型應用於環境變數。默認值為 「string」,但是,例如,路徑變數是自動列表。
$ '/usr/bin' in $PATH
True
Xonsh 接受 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
這意味著 Python 關鍵字是被解釋了。如果我們想要列印著名的《蘇斯博士》書的標題,我們需要引用關鍵詞。
$ 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)
虛擬環境可能會有點棘手。一般的虛擬環境(取決於它們類似 Bash 的語法)無法工作。但是,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
管理器可以列出所有可能的 xontribs
及其當前狀態(已安裝、已載入或未載入)。
可以編寫一個 xontrib
並上傳到 PyPi
以使其可用。但是,最好將它添加到 xontrib
索引中,以便 Xonsh 提前知道它。比如,這能讓配置嚮導建議它。
如果你曾經想過,「Python 可以成為我的 shell 嗎?」,然後你只要 pip install xonsh
一下就能知道。
via: https://opensource.com/article/18/9/xonsh-bash-alternative
作者:Moshe Zadka 選題:lujun9972 譯者:geekpi 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive