Eshell не может найти сценарий по пути eshell - PullRequest
0 голосов
/ 02 марта 2019

Моя цель

Я пытаюсь добавить "/ opt / bin" в список путей, которые eshell использует для поиска скриптов.До сих пор я пытался сделать это тремя способами

Пока предпринимаются попытки

1) (setenv "PATH" (concat "/ opt / bin:" (getenv "PATH")))

2) (eshell / addpath "/ opt / bin:")

3) (добавление в список 'exec-path "/ opt / bin")

Первая попытка действительно добавляет" / opt / bin "к пути eshell (он отображается как первый экземпляр" / opt / bin: "в выводе вызова" which lein "ниже)

Вторая попытка также добавляет "/ opt / bin" к пути eshell (он отображается как второй экземпляр "/ opt / bin:" в выводе вызова "which lein" ниже)

У меня на самом деле некоторое время был добавлен "/ opt / bin" к моему exec-path.Я полагаю, что я сделал это так, чтобы / opt / bin находился на моем пути при запуске команды term для запуска оболочки, это, кажется, работает нормально, но не помогает eshell находить там команды.

Неудачные попытки и временный обходной путь

В приведенном ниже выводе eshell видно, что даже при наличии команды lein по пути eshell распознает, что eshell не находит команду.Однако, если я создаю символическую ссылку из каталога, который находится в пути по умолчанию eshells, к сценарию в / opt / bin, eshell сможет найти его.

Вывод Eshell

~ $ which lein
which: no lein in (/opt/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/local/sbin:/usr/sbin:/sbin:/opt/bin:)
~ $ l /opt/bin/ | grep lein
-rwxr-xr-x   1 kevin          kevin    12538 2019-01-17 07:32 lein
~ $ sudo ln -s /opt/bin/lein /usr/local/bin/lein
[sudo] password for kevin: 
~ $ 
~ $ which lein
/usr/local/bin/lein

Я бы предпочел не создавать символические ссылки в / usr / local / bin / только для того, чтобы eshell мог находить скрипты в моем / opt / bin.Обратите внимание, что даже после перезапуска emacs он находит символическую ссылку, а не скрипт в / opt / bin.Это происходит в экземпляре графического интерфейса пользователя emacs-25 в linux mint debian (v9.3) edition.

Вопрос:

Как получить eshell для фактической проверкипуть eshell вместо какого-то списка каталогов по умолчанию?Должен ли я обновлять другую переменную пути?

1 Ответ

0 голосов
/ 05 марта 2019

Глядя на источник eshell/addpath, он использует setq на eshell-path-env, который является локальным буфером var.Это означает, что если вы используете eshell/addpath, оно должно выполняться в контексте каждого буфера eshell.Лучший способ сделать это - использовать ловушку режима.

(defun jpk/eshell-mode-hook ()
  (eshell/addpath "/opt/bin"))
(add-hook 'eshell-mode-hook #'jpk/eshell-mode-hook)

Я не очень знаком с Eshell, поэтому я не собираюсь говорить, что это лучший способ, но он должен работать.eshell-path-env изначально установлен в (getenv "PATH"), поэтому странно, что настройка PATH env var не работает (если вы не делаете это после загрузки eshell).

...