在 jupyter notebook 中使用 bash_profile 别名

Use bash_profile aliases in jupyter notebook

我的 Jupyter notebook 似乎在我的 .bash_profile 中收集了我 export 的所有内容,但没有我 alias.

的内容

我认为 ! 使用 bin/sh,所以可以理解 bash 配置文件的别名没有移植过来,但是 %%bash 魔法也没有拿起我写的别名。

是否可以通过 !(理想情况下)或至少使用 %%bash 使我的 bash 个人资料中的别名可用?

这似乎有效(python3,根据我在 jupyter issue 中发现的 hack 修改)

import subprocess

lines = subprocess.check_output('source ~/.bash_profile; alias',shell=True).split(b'\n')
manager = get_ipython().alias_manager
for line in lines:
    line = line.decode("utf-8") 
    split_index = line.find('=')
    cmd = line[split_index+1:]
    alias = line[:split_index]
    cmd = cmd[1:-1]
    print ("ALIAS:{}\t\tCMD:{}".format(alias,cmd))

    manager.soft_define_alias(alias, cmd)

这是另一种替代方法,与其说是一种解决方案,不如说是一种变通方法:您可以使用 %alias 魔法在笔记本本地定义别名,并在将来使用 %store 使这些别名可用魔法。这里有更多的别名技巧:https://github.com/ipython/ipython/wiki/Cookbook:-Storing-aliases

更多关于 %store 魔法的信息:http://ipython.readthedocs.io/en/stable/config/extensions/storemagic.html

下一步是破解 %store 魔法以保留这些别名:https://github.com/ipython/ipython/blob/master/IPython/extensions/storemagic.py


为了后代,这里是我 运行 在最终找到解决方案之前进行的一些实验的结果:

我在 %%bash 单元格中找到了我的 .bash_profile。在那个单元格中,我能够查询我在 .bash_profile 中定义的变量的值,并且能够通过调用 alias 列出别名命令。但是,我仍然无法使用别名命令。此外,我的 .bash_profile 中定义的变量只能通过源调用在单元格内访问:尝试在随后的 %%bash 单元格中访问它们不起作用,并且 alias 命令也失败了。更有趣的是:如果我使用 ! 进行采购,我无法查询在我的 bash 配置文件中定义的变量,也无法在相同的 ! shell 命令中列出我的别名细胞.

我只想说,%%bash 魔术是挑剔的。