Shell语言对于交互式使用很有用。 但是,这种优化通常需要权衡使用它们作为编程语言,这在编写shell脚本时有时会感觉到。
输入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类型应用于环境变量。 默认值为“字符串”,但是,例如,路径变量是自动列出的。
$ '/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
,那么这里就是环境所在。
请注意,当前激活的环境不会影响x
onsh
。 它无法从激活的环境中导入任何内容。
$ 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
,它是xontrib
的第三方扩展。 xontrib
管理器可以列出所有可能的xontribs
及其当前状态(已安装,已加载或两者均未列出)。
可以编写一个xontrib
并将其上传到PyPi
使其可用。 但是,将其添加到xontrib
索引是个好习惯,这样Xonsh会提前知道它。 例如,这允许配置向导提出建议。
如果您曾经想过,“ Python可以成为我的外壳吗?” 那么您只需一pip install xonsh
就可以了。
翻译自: https://opensource.com/article/18/9/xonsh-bash-alternative