xonsh是一种基于Python的跨平台Unix Shell语言和命令提示符。
该语言是Python 3.6 的超集,带有其他shell原语。
xonsh是一种外壳语言和命令提示符。与其他Shell不同,xonsh基于Python,并添加了其他语法,这些语法使调用子流程命令,操纵环境以及处理文件系统变得容易。xonsh命令提示符使用户可以交互式访问xonsh语言。
一、安装:
代码语言:javascript复制pip install xonsh[full]
二、基础语法:
xonsh语言基于Python,比如说:
代码语言:javascript复制>>> 1 1
2
从这里使用>>>
前缀提示任何xonsh输入。它遵循Python约定,并有助于欺骗语法高亮显示,(区别于shell使用$
)
因为这也是Python,因此能够导入模块,打印值并使用其他内置的Python功能:
代码语言:javascript复制>>> import sys
>>> print(sys.version)
3.4.2 |Continuum Analytics, Inc.| (default, Oct 21 2014, 17:16:37)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]
我们还可以创建和使用文字数据类型,例如int,float,列表,集合和字典
代码语言:javascript复制>>> d = {'xonsh': True}
>>> d.get('bash', False)
False
xonsh shell还支持多行输入,以进行更高级的流量控制。只要输入的第一行本身在语法上无效,就会自动进入多行模式。当光标位于第一列中时,如果按Enter(或Return),则退出多行模式。
代码语言:javascript复制>>> if True:
... print(1)
... else:
... print(2)
...
1
流控制当然包括循环。
代码语言:javascript复制>>> for i, x in enumerate('xonsh'):
... print(i, x)
...
0 x
1 o
2 n
3 s
4 h
还可以定义和调用函数和类。
代码语言:javascript复制>>> def f():
... return "xonsh"
...
>>> f()
'xonsh'
为了简化缩进,Shift Tab将输入4个空格。关于这部分内容,请参见“基础知识”部分。就像Python。
三、环境变量
环境变量$
按名称后写。例如, $HOME
,$PWD
,和$PATH
。
>>> $HOME
'/home/snail'
可以像设置Python中的任何其他变量一样设置(和导出)环境变量。删除它们也是如此。
代码语言:javascript复制>>> $GOAL = 'Become the Lord of the Files'
>>> print($GOAL)
Become the Lord of the Files
>>> del $GOAL
2.1 环境本身${...}
所有环境变量都存在于内置${...}
(aka __xonsh__.env
)映射中。您可以直接访问此映射,但是在大多数情况下,您不需要这样做。
例如,如果您要检查当前会话中是否存在环境变量:
代码语言:javascript复制>>> 'HOME' in ${...}
True
要获取有关特定环境变量的信息,可以使用 help()
方法。
>>> ${...}.help('XONSH_DEBUG')
上的一种有用的方法${...}
是swap()
。它可以用于临时设置环境变量:
>>> with ${...}.swap(SOMEVAR='foo'):
... echo $SOMEVAR
...
...
foo
>>> echo $SOMEVAR
>>>
2.1.1 注意:
在bash,$NAME
并${NAME}
在语法上等价的。在xonsh中,它们具有不同的含义。
我们可以将任何有效的Python表达式放在中的花括号内 ${<expr>}
。然后,该表达式的结果将用于在环境中查找值。以下是一些实际的示例:
>>> x = 'USER'
>>> ${x}
'snail'
>>> ${'HO' 'ME'}
'/home/snail'
三、运行命令
作为shell,xonsh的目的是使运行命令变得轻松而有趣。运行子进程命令应该像在其他任何shell中一样工作。
代码语言:javascript复制>>> echo "Yoo hoo"
Yoo hoo
>>> cd xonsh
>>> ls
build docs README.rst setup.py xonsh __pycache__
dist license scripts tests xonsh.egg-info
>>> dir scripts
xonsh xonsh.bat
>>> git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: docs/tutorial.rst
no changes added to commit (use "git add" and/or "git commit -a")
>>> exit