Режим компиляции 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: в этой оболочке нет управления заданиями

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