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 worldXonsh 通过使用 Prompt Toolkit 支持 shell 命令和 Python 表达式的补全。补全功能在视觉上信息丰富,显示可能的补全项并具有带内下拉列表。
它还支持环境访问。它使用一个简单但强大的启发式方法将 Python 类型应用于环境变量。默认值为“字符串”,但例如,路径变量会自动成为列表。
$ '/usr/bin' in $PATH
TrueXonsh 接受 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 管理器可以列出所有可能的 xontrib 及其当前状态(已安装、已加载或两者都不是)。
可以编写一个 xontrib 并将其上传到 PyPi 以使其可用。但是,最佳实践是将其添加到 xontrib 索引,以便 Xonsh 提前了解它。例如,这允许配置向导建议它。
如果你曾经想知道“Python 可以成为我的 shell 吗?”,那么你只需 pip install xonsh 即可找到答案。
 
 
 
 
 

2 条评论