既能执行shell又可以执行python的环境

2021-05-28 11:45:52 浏览数 (1)

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

代码语言:javascript复制
>>> $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()方法。

代码语言:javascript复制
>>> ${...}.help('XONSH_DEBUG')

上的一种有用的方法${...}swap()。它可以用于临时设置环境变量:

代码语言:javascript复制
>>> with ${...}.swap(SOMEVAR='foo'):
...     echo $SOMEVAR
...
...
foo
>>> echo $SOMEVAR

>>>

2.1.1 注意:

在bash,$NAME${NAME}在语法上等价的。在xonsh中,它们具有不同的含义。

我们可以将任何有效的Python表达式放在中的花括号内 ${<expr>}。然后,该表达式的结果将用于在环境中查找值。以下是一些实际的示例:

代码语言:javascript复制
>>> 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

0 人点赞