Команды из .bashrc недоступны в Emacs

У меня есть некоторые псевдонимы и функции, определенные в ~/.bashrc.

Я запускаю emacs из окна терминала с помощью emacs -nw

Когда я выполняю M-x shell-command, псевдонимы и функции из ~/.bashrc недоступны, но дают "команду не найдена".

Я немного искал Google, но все сообщения, которые я нахожу, говорят, если я правильно их понимаю, что ~/.bashrc - это место, где это должно работать (а не ~/.profile или ~/.bash_profile).

Что мне не хватает?

Ответ 1

Псевдонимы доступны только в интерактивной оболочке - снимок из bash man-страницы:

Псевдонимы не расширяются, если оболочка не является интерактивной, если только Параметр expand_aliases установлен использование магазина        (см. описание магазина в разделе SHELL BUILTIN COMMANDS ниже).

Ответ 2

Если вы запустите Emacs из интерактивной оболочки (в которой исполняются .bashrc и т.д.), то команды из вашего .bashrc должны быть доступны как для shell-command, так и shell, по крайней мере, для того, как это работает я.

Но, как говорится в другом ответе, нет реального способа получить среду .bashrc в emacs. Есть документация о файле .emacs_bash, но это никогда не сработало для меня.


Хорошо, продумайте свой вопрос здесь. Если вы ищете функции и псевдонимы вместо команд, изменяя пути в .bashrc, проблема неинтерактивности является проблемой. Я думаю, вы можете изменить аргумент по умолчанию для командной оболочки (посмотрите explicit-bash-args), чтобы сделать bash интерактивным, но, вероятно, это имеет непреднамеренные последствия.