歡迎光臨
每天分享高質量文章

我為什麼喜歡 Xonsh | Linux 中國

有沒有想過用 Python 做你的 shell?
— Moshe Zadka


致謝
編譯自 | 
https://opensource.com/article/18/9/xonsh-bash-alternative
 
 作者 | Moshe Zadka
 譯者 | geekpi ???共計翻譯:789.5 篇 貢獻時間:1785 天

有沒有想過用 Python 做你的 shell?

Shell 語言對互動式使用很有用。但是在使用它們作為程式語言時這種最佳化就需要權衡,有時在編寫 shell 指令碼時會感覺到這點。

如果你的 shell 也能理解一種更可伸縮的語言會怎樣?比如說,Python?

進入 Xonsh[1]

安裝 Xonsh 就像建立虛擬環境一樣簡單,執行 pip install xonsh [ptk,linux],然後執行 xonsh

首先,你可能奇怪為什麼你的 Python shell 有一個奇怪的提示:

  1. $ 1+1

  2. 2

好的,計算器!

  1. $ print("hello world")

  2. hello world

我們還可以呼叫其他函式:

  1. $ from antigravity import geohash

  2. $ geohash(37.421542, -122.085589, b'2005-05-26-10458.68')

  3. 37.857713 -122.544543

然而,我們仍然可以像常規 shell 一樣使用它:

  1. $ echo "hello world"

  2. hello world

我們甚至可以混搭!

  1. $ for i in range(3):

  2. .     echo "hello world"

  3. .

  4. hello world

  5. hello world

  6. hello world

Xonsh 支援使用 Prompt Toolkit[2] 補全 shell 命令和 Python 運算式。補全有視覺化提示,會顯示可能的補全並有下拉串列。

它還支援訪問環境變數。它使用簡單但強大的啟髮式方法將 Python 型別應用於環境變數。預設值為 “string”,但是,例如,路徑變數是自動串列。

  1. $ '/usr/bin' in $PATH

  2. True

Xonsh 接受 shell 形式或 Python 形式的布林快捷運運算元:

  1. $ cat things

  2. foo

  3. $ grep -q foo things and echo "found"

  4. found

  5. $ grep -q bar things && echo "found"

  6. $ grep -q foo things or echo "found"

  7. $ grep -q bar things || echo "found"

  8. found

這意味著 Python 關鍵字是被解釋了。如果我們想要列印著名的《蘇斯博士》書的標題,我們需要取用關鍵詞。

  1. $ echo green eggs "and" ham

  2. green eggs and ham

如果我們不這樣做,我們會感到驚訝:

  1. $ echo green eggs and ham

  2. green eggs

  3. xonsh: For full traceback set: $XONSH_SHOW_TRACEBACK = True

  4. xonsh: subprocess mode: command not found: ham

  5. Did you mean one of the following?

  6.     as:   Command (/usr/bin/as)

  7.     ht:   Command (/usr/bin/ht)

  8.     mag:  Command (/usr/bin/mag)

  9.     ar:   Command (/usr/bin/ar)

  10.     nm:   Command (/usr/bin/nm)

虛擬環境可能會有點棘手。一般的虛擬環境(取決於它們類似 Bash 的語法)無法工作。但是,Xonsh 自帶了一個名為 vox 的虛擬環境管理系統。

vox 可以建立、啟用和停用 ~/.virtualenvs 中的環境。如果你用過 virtualenvwrapper,這就是環境變數所在的地方。

請註意,當前啟用的環境不會影響 xonsh。它無法從啟用的環境中匯入任何內容。

  1. $ xontrib load vox

  2. $ vox create my-environment                                                    

  3. ...

  4. $ vox activate my-environment        

  5. Activated "my-environment".                                                    

  6. $ pip install money                                                            

  7. ...

  8. $ python                                                              

  9. ...

  10. >>> import money                                                              

  11. >>> money.Money('3.14')                        

  12. $ import money

  13. xonsh: For full traceback set: $XONSH_SHOW_TRACEBACK = True

  14. 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[4] 選題:lujun9972 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

贊(0)

分享創造快樂