Как заставить emacs shell запускать файл инициализации автоматически?

My bash init script (~/.profile) содержит важные инициализации, но всякий раз, когда я использую shell-команду или компилирую в emacs, этот файл инициализации не читается, и без этой инициализации мои команды bash в emacs не удастся:( Как заставить emacs выполнить мой init файл для оболочки, которую он использует для командной оболочки?

Разъяснение: Я не говорю о оболочке M-x, которая очень хорошо читает мой файл инициализации, когда я symlinked.profile в .emacs_bash.

Ответы

Ответ 1

Переместите ваши инициализационные процедуры в файл ~/.bashrc

Затем добавьте строку

source ~/.bashrc

в ваш ~/.bash_profile файл. См. bash man page для подробного объяснения того, какие файлы запуска загружаются, когда. Ключом является различие между интерактивной и неинтерактивной оболочкой, а также разница между логином и оболочкой без входа.

В общем случае, .bash_profile запускается при входе в систему с использованием оболочки, а .bashrc запускается при запуске новой оболочки (приложение X X Terminal является исключением из этого правила при запуске .bash_profile для каждого новый терминал). Для получения дополнительной информации в форме статьи смотрите здесь.

Ответ 2

Я использую Mac, shell-command не выполнил .bashrc, а не .bash_profile, я искал решение проблемы с моей проблемой PATH.

поместите это в свои .emacs: (setenv "PATH" (shell-command-to-string "source ~/.bashrc; echo -n $PATH" ))

подробнее, см. Как заставить emacs запускать файл ~/.bash_profile

Ответ 3

Копание через источник elisp; похоже, что команда shell в emacs просто выполняет команду bash -c "в моем случае. Решение состоит в том, чтобы запустить emacs (emacs &) в оболочке, где уже запущен мой .profile(вместо запуска emacs из меню графического интерфейса моего диспетчера окон).