выполнить команду Bash из IPython
Я хочу, чтобы источник моей среды bash при выполнении команды bash из IPython с помощью !
оператора, что позволяет мне получить доступ к моим определенным функциям bash:
In[2]: !<my_fancy_bash_function> <function_argument>
в настоящее время IPython является источником sh
а не bash
:
In[3]: !declare -F
sh: 1: declare: not found
Как исправить bash
и установить параметры моей среды из IPython?
Ответы
Ответ 1
Фернандо Перес, создатель IPython, предлагает следующее:
In [1]: %%bash
. ~/.bashrc
<my_fancy_bash_function> <function_argument>
Это работает на текущей стабильной версии (0.13.2). Он признает это немного неуклюжим и приветствует запросы на тягу. , ,
Ответ 2
Если !
реализация использует IPython.utils._process_posix.system
под капотом, тогда она будет использовать то, which sh
возвращает в качестве оболочки обработки. Это может быть истинная реализация оболочки Bourne - это, скорее всего, Bash в некоторых режимах совместимости на многих Linux. На моем MacBook Pro похоже, что это сырая оболочка Bash:
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
но сегодня это не похоже. Вероятно, вы можете ProcessHandler.sh
github, изменить ProcessHandler.sh
свойства ProcessHandler.sh
чтобы заглянуть в os.environ['SHELL']
и использовать это, если оно установлено вместо вызова pexpect.which('sh')
. Затем выведите запрос на вытягивание.