Как заставить 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 из меню графического интерфейса моего диспетчера окон).