您的位置:首页 > 运维架构 > Linux

我为什么喜欢 Xonsh | Linux 中国

2018-09-15 08:48 351 查看
有没有想过用 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中国 荣誉推出


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: