Я скомпилировал последнюю версию emacs из исходного кода (v24.2), потому что версия, установленная на моем компьютере, (довольно) старая для меня (v21.3). Я сделал обычное:
$configure --prefix=$HOME
make
make install
Сейчас я тестирую emacs и понял, что он все еще запускает предыдущую версию ... в то время как мой $HOME/bin
путь должен переопределить системную (поскольку в моем .bashrc
файле он добавлен к $ PATH ).
Моей первой мыслью было увидеть which
вывод команды. И удивительно, это дает путь к новым Emacs. Я не могу понять, где здесь расхождение. В том же сеансе есть разные выводы:
$ emacs --version
GNU Emacs 21.3.1
$ `which emacs` --version
GNU Emacs 24.2.1
У меня нет псевдонима, связанного с Emacs. Совсем.
$ alias | grep emacs
$
Любая идея, что происходит, пожалуйста?
Ответы:
Три возможности, которые приходят мне в голову:
emacs
(который вы проверили)emacs
emacs
двоичный файл отсутствует в хеш-таблице PATH вашей оболочки.Вы можете проверить, есть ли у вас функция
emacs
:И удали это:
Ваша оболочка также имеет хеш-таблицу PATH, которая содержит ссылку на каждый двоичный файл в вашем PATH. Если вы добавляете новый двоичный файл с тем же именем, что и существующий в другом месте в вашем PATH, оболочка должна быть проинформирована путем обновления хеш-таблицы:
Дополнительное объяснение:
which
не знает о функциях, так как это не встроенный bash:Этот сценарий демонстрирует новое поведение двоичной хеш-таблицы.
Хотя я этого не называл,
which cat
всегда возвращал первоеcat
в моем PATH, потому что он не использует хеш-таблицу оболочки.источник
type
команду.hash -r
действительно исправил мою проблему.Да, не используйте который :
PATH
.Для этого есть встроенная функция. Два, даже:
type
иcommand
. POSIX способ:В bash вы также можете использовать
type -p emacs
только путь к внешней команде.Однако и здесь,
which
на самом деле, верно. Bash хранит информацию о местонахождении команды в памяти, чтобы в следующий раз она могла выполнить команду быстрее. Вы установили новыйemacs
исполняемый файл на свой компьютерPATH
, но Bash все еще имеет старое расположение в своем кэше. Запустите,hash emacs
чтобыemacs
снова посмотреть илиhash -r
очистить кеш.источник
Вы вышли из системы и вошли в систему, чтобы ваш обновленный
.bashrc
файл логина был перечитан? Если нет, среда вашего текущего сеанса не была обновлена.источник
`which emacs` --version
согласился быemacs --version
, потому чтоwhich
наследует свой PATH от текущей оболочки.