Как заставить IPython раскрашивать вывод многострочного вызова Bash с объявлениями из моего .bashrc или .bash_profile в Mac OS X с помощью coreutils?

Здесь могут быть какие-то странности с моей конфигурацией, просто примечание. Я использую Mac OS X Mountain Lion, но использую coreutils, установленные через Homebrew:

У меня есть несколько функций в моем .bash_profile, которые я использую для поиска в программах Python.

function greppy() { find . -name '*.py' -exec grep -nHr --color "$1" {} \; ; }
function grepcy() { find . -name '*.pyx' -exec grep -nHr --color "$1" {} \; ; }

Чтобы вызвать их из IPython, я вызываю многострочный bash:

In [6]: %%bash
   ...: . ~/.bash_profile
   ...: greppy triangle
   ...:

Это правильно запускает функцию, но не окрашивает поисковый запрос grep. Я также отметил:

In [10]: %%bash
   ....: source ~/.bash_profile
   ....: ls --color
   ....: 

Цвета выводятся правильно, но вызывается:

In [11]: %%bash
   ....: source ~/.bash_profile
   ....: la

Псевдоним, который всегда использует ls -a --color в моем .bash_profile, не работает.

Еще одно замечание, которое может быть полезным, заключается в том, что мой .bash_profile также вызывает dircolors для чтения конфигурации .dir_colors, которая настраивает окраску каталогов для ls (чтобы по-разному окрашивать цвета py и pyx и делать цвета .pyc относительно серыми, чтобы они были менее виден). Я не уверен, есть ли дополнительное взаимодействие.

У меня есть псевдоним .bashsrc и IPython, настроенный в более старой конфигурации (псевдоним .ipythonrc) на рабочей машине, которая правильно окрашивается. Я пытаюсь заставить то же самое работать на моем MacBook Air для домашнего использования. Это не очень важная часть всего моего круга разработки Python для ipython/bash/vim, но я достаточно разборчив в мелких деталях в своих средах, поэтому я хотел бы заставить его работать, если смогу.


person exogeographer    schedule 14.12.2013    source источник
comment
Я получаю то же поведение, что и вы, если я вызываю ls через магию ячейки %%bash. Похоже, это ошибка.   -  person William Denman    schedule 15.12.2013


Ответы (1)


Немного некрасиво, но если вы похожи на меня и действительно хотите раскрасить вывод, вот ваш лучший выбор для bash и zsh (бонус):

In [10]: !bash -c 'source ~/.bash_profile; greppy searchterm'

зш:

In [10]: !zsh -c 'source ~/.zshrc; greppy searchterm'

и вы можете определить псевдоним для этого:

%alias greppy zsh -c 'source ~/.zshrc && greppy %s'

Надеюсь, это может помочь кому-то еще!

person exogeographer    schedule 18.12.2013