25

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

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

目前 IPython 正在采购sh而不是bash

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

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

4

2 回答 2

30

IPython 的创建者 Fernando Perez建议

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

这适用于当前的稳定版本(0.13.2)。他承认这有点笨拙,并欢迎拉取请求。. .

于 2013-07-02T22:21:24.850 回答
24

如果!实现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'). 然后发出拉取请求。

于 2013-04-10T13:55:42.267 回答