Режим компиляции Emacs не увидит псевдоним bash
Компиляция Emacs Mx не видит псевдонимов, установленных в.bashrc. Если я использую оболочку Mx, введите псевдоним, это нормально. Я пытался найти.bashrc из / etc / profile, из ~/.profile, ~/bash_env, все, что я могу придумать, безрезультатно.
Я нахожусь на Emacs 23 и Ubuntu 11. Я запускаю emacs, используя /usr/bin/emacs %F, с кнопки на рабочем столе.
4 ответа
Emacs наследует свою среду от родительского процесса. Как вы вызываете Emacs - из командной строки или другим способом?
Что произойдет, если вы:
Mx скомпилировать RET Ca Ck bash -i -c your_alias RET
Вызов bash в качестве интерактивной оболочки (опция -i) должен прочитать ваши псевдонимы.bashrc.
Редактировать: Я думаю, что и Mx shell-command, и Mx compile выполняют команды в нижней оболочке через call-process. Попробуйте следующее в вашем.emacs (или просто оцените):
(setq shell-file-name "bash")
(setq shell-command-switch "-ic")
Я заметил, что после оценки вышеизложенного псевдонимы.bashrc подобраны для использования как командой Mx shell, так и Mx compile, т.е.
Mx скомпилируйте RET your_alias RET
должен тогда работать.
Моя среда: Emacs 24.1 (pretest rc1), OSX 10.7.3
Ответ Кита Цветка работает, но может привести к некоторым замедлениям из-за ненужной загрузки.bashrc в других местах (предположительно, много раз, мой компьютер не был полностью загружен, но emacs был почти непригоден для использования autocomplete.el).
Альтернативный способ - локально изменить shell-command-switch
только для функций, где это необходимо. Это можно сделать с помощью функции "совета" в emacs, чтобы создать оболочку для этих функций. Вот пример, который модифицирует compile
:
;; Define + active modification to compile that locally sets
;; shell-command-switch to "-ic".
(defadvice compile (around use-bashrc activate)
"Load .bashrc in any calls to bash (e.g. so we can use aliases)"
(let ((shell-command-switch "-ic"))
ad-do-it))
Вам нужно написать аналогичный "совет" для каждой функции, которую вы хотите использовать.bashrc (например, мне также нужно было определить тот же совет для recompile
), просто скопируйте выше и замените compile
в выше с другим именем функции.
Вам может понравиться bash-завершение Emac:
https://github.com/szermatt/emacs-bash-completion
Вы сможете использовать табуляцию своих псевдонимов в минибуфере компиляции и в режиме оболочки.
Наслаждайтесь!
(здесь говорят об автозаполнении Bash в режиме оболочки Emacs)
Я думаю, что команды компиляции не интерпретируются через оболочку: они полностью исполняются emacs (что означает, что псевдонимы, функции оболочки и другие специфичные для оболочки вещи не учитываются).
Попробуйте обернуть вашу команду компиляции в shell-скрипт, который будет источником правильной среды.
Вы можете сделать это либо с помощью полноценного shell-скрипта в виде
#!/bin/bash
source "~/.bashrc"
my_command
или непосредственно в emacs с помощью команды компиляции вида
bash -c "source ~/.bashrc; my_command"
См. Есть ли способ заставить мои emacs распознавать мои псевдонимы bash и пользовательские функции, когда я запускаю команду оболочки? для исправления, которое не запускает все ваши.bashrc и не создает эти сообщения об ошибках:
bash: невозможно установить группу процессов терминала (-1): неподходящий ioctl для устройства bash: в этой оболочке нет управления заданиями