Emacs и /etc/profile в OS X

Когда я запускаю оболочку (M-x shell) в Emacs.app порожденная оболочка не читает (или, более конкретно, source), /etc/profile во время инициализации (у меня там много настроек оболочки).

У меня есть переменная пути, установленная в ~/.MacOSX/environment.plist, которая необходима для того, чтобы Emacs.app читал $PATH, поэтому я сделал одну из необходимых адаптаций для приспособления Emacs к OS X. Это не похоже, что-то связано с переменной PATH, а скорее с инициализацией самой оболочки.

1 ответ

Решение

Хорошо, вот что я сделал, чтобы решить проблему. Он основан на ответе на этот вопрос от StackOverflow, который я нашел после того, как немного перепутал мои поисковые запросы в Google. Я добавил следующую строку в .bashrc:

source /etc/profile

Теперь все работает как надо.

РЕДАКТИРОВАТЬ: Почему проблема возникает

Я обнаружил, почему вы должны явно заставить оболочку BASH читать /etc/profile, а не читать ее при вызове. Вот соответствующий раздел из руководства BASH (man bash):

Когда запускается интерактивная оболочка, которая не является оболочкой входа в систему, bash читает и выполняет команды из ˜ /.bashrc, если такой файл существует. Это может быть запрещено с помощью опции −−norc. Опция -rc-файл-файла заставитbash читать и выполнять команды из файла вместо ˜ /.bashrc.

Из того, как это написано (и что он говорит о том, как вызывать оболочки входа в систему до этого), можно сделать вывод, чтоshell.elне вызывает оболочку входа Я искал доказательства этого вshell.elи, похоже, это правда, BASH вызывается с флагом -i (интерактивным), но не с флагом --login. Оболочки, не входящие в систему, читают .bashrc, поэтому вы можете обойти эту проблему, поставив source /etc/profile в .bashrc.

Другие вопросы по тегам