从IPython执行Bash命令

时间:2013-04-10 13:24:05

标签: bash ipython

我想在使用!运算符从IPython执行bash命令时获取bash环境,从而允许我访问我定义的bash函数:

In[2]: !<my_fancy_bash_function> <function_argument>

目前,IPython正在寻找sh而不是bash

In[3]: !declare -F
sh: 1: declare: not found

如何从IPython中获取bash并设置我的环境设置?

2 个答案:

答案 0 :(得分:17)

IPython的创造者Fernando Perez,suggests this

In [1]: %%bash
. ~/.bashrc
<my_fancy_bash_function> <function_argument>

这适用于当前的稳定版本(0.13.2)。他承认这有点笨重,欢迎pull requests。 。

答案 1 :(得分:13)

如果!实现在引擎盖下使用IPython.utils._process_posix.system,那么它将使用任何which sh返回作为处理shell。这可能是Bourne shell的真正实现 - 在许多Linux上,它可能是Bash的兼容模式。在我的MacBook Pro上看起来它是一个原始的Bash shell:

In [12]: !declare -F

In [13]: !echo $BASH
/bin/sh

In [14]: !echo $BASH_VERSION
3.2.48(1)-release

In [15]: import os

In [16]: os.environ['SHELL']
Out[16]: '/bin/zsh'

我希望它会使用$SHELL环境变量,但今天似乎没有。您可以分支github仓库,修改ProcessHandler.sh属性实现以查看os.environ['SHELL']并在设置时使用它而不是调用pexpect.which('sh')。然后发出拉取请求。