Когда я выполняю оболочку (M-x shell
) в Emacs.app не читает порожденная оболочка (или более конкретно, source
), /etc/profile
во время инициализации (у меня есть много настроек оболочки, расположенных там).
У меня есть набор переменной пути в ~/.MacOSX/environment.plist, как необходимо, чтобы заставить Emacs.app читать $PATH, таким образом, я сделал одну из необходимой адаптации для размещения Emacs к OS X. Это, кажется, не имеет никакого отношения к переменной ПУТИ, а скорее имеет отношение к инициализации самой оболочки.
Хорошо, вот то, что я сделал для решения проблемы. Это базируется ответ на этот вопрос от StackOverflow, который я нашел после спутывания моих критериев поиска немного на Google. Я добавил следующую строку к .bashrc
:
source /etc/profile
Все работает, как это должно теперь.
Править: Почему проблема происходит
Я нашел, почему необходимо явно вынудить оболочку Bash считать/etc/profile, а не иметь его чтение на вызове. Вот соответствующий раздел из руководства Bash (man bash
):
Когда интерактивная оболочка, которая не является оболочкой входа в систему, запускается, удар читает и выполняет команды от ˜/.bashrc, если это file существует. Это может быть запрещено при помощи −−norc опции. −−rcfile file опция вынудит удар считать и выполнить команды от file вместо ˜/.bashrc.
Можно вывести из способа, которым это записано (и что он говорит о том, как вызвать оболочки входа в систему перед этим), это shell.el
не вызывает оболочку входа в систему. Я искал доказательство этого в shell.el
и это, кажется, верно, Bash вызывается с (интерактивным) флагом-i, но не - флаг входа в систему. Оболочки невхода в систему действительно читают .bashrc, таким образом, это - то, почему можно работать вокруг проблемы путем помещения source /etc/profile
в .bashrc.