Получение GNU Windows Emacs для выполнения моего ~/.bash_profile при создании Cygwin M-x окружает подпроцесс

Я использую GNU Emacs на Windows и Cygwin для оболочки, что я выполняю во всей своей работе. ~/.profile используемый Cygwin является ~/.bash_profile. Если я запускаю оболочку Cygwin путем выполнения C:\cygwin\Cygwin.bat, она запускает и выполняет ~/.bash_profile прекрасный.

Я создал Cygwin в GNU Emacs в Windows путем помещения следующего в мой ~/.emacs, как предписано:

;; Set up Cygwin
(add-to-list 'load-path "C:/Program Files/emacs-site-lisp/cygwin")
(require 'setup-cygwin)

C:\Program Files\emacs-site-lisp то, куда я поместил мой по всему сайту шепелявость (очевидно).

Когда я выполняю оболочку M-x, подпроцесс удара Cygwin создается в буфере, названном *shell*.Прекрасно. Однако мой ~/.bash_profile не выполняется.

Как я делаю ~/.bash_profile, вступают в силу?

1
задан 14.09.2010, 18:10

2 ответа

Лучший ответ, который я могу дать, является ссылкой, которая объясняет различия между .bash_profile и .bashrc: http://joshstaiger.org/archives/2005/07/bash_profile_vs.html

Существует много истории там, и часть его имеет отношение к Былым временам, когда мы набрали бы в к системам с медленными модемами, и мы хотели оболочку и выполнение быстро. Таким образом, мы хотели бы "войти в систему" со средой, которая была быстра, чтобы установить и затем породить "подоболочки", которые были полностью настроены, потому что это было быстрее, чтобы сделать от, уже вошел в систему оболочка.

В Вашем случае Ваша оболочка inital запускается как оболочка входа в систему (проверка cygwin.bat - это звонит bash с --login). Но подоболочка emacs не запускается как оболочка входа в систему. Таким образом, только Ваш .bashrc файл загружается.

В эти дни я думаю, что большинство людей просто сохраняет все это в .bashrc и имеет загрузку .bash_profile что вместо этого:

if [ -f ~/.bashrc ]; then
    source ~/.bashrc
fi

Но необходимо быть осторожными, как который Вы неоднократно не добавляете к переменным PATH если Вы проявляете этот подход. Иначе каждая подоболочка заканчивается с дублирующимися записями на PATH и можно получить действительно длинные и непослушные переменные, которые должны искаться, и вещи замедляются.

4
ответ дан 12.12.2019, 08:15

Это - то, как я делаю это - и это работает:

(setq explicit-bash-args '("--login" "--init-file" "c:/home/cbalz/.bash_profile" "-i"))

Можно было бы думать, что 'bash.exe' выполнит '.bash_profile' без явного init файла, так как это - оболочка входа в систему (' - вход в систему'), и 'bash.exe' действительно правильно находит и выполняет '.bashrc'. Дело обстоит не так как бы то ни было. С тех пор '.bash_profile' источники '.bashrc', решение состоит в том, чтобы просто выполнить '.bash_profile'.

Я думаю, что Cygwin должен выполнить службу Windows для управления переменными среды, так, чтобы оболочки могли наследоваться правильно.

2
ответ дан 12.12.2019, 08:15

Теги

Похожие вопросы