Возникли некоторые проблемы с PATH
настройками в Emacs, которые влияют на мою среду на Haskell:
Я использую ZSH, и когда я иду в командную строку и вызываю echo $PATH
, он возвращает:/Users/g/Library/Haskell/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin
Это исходит из .zprofile
конфигурации, где у меня есть:
# Set the list of directories that Zsh searches for programs.
path=(
~/Library/Haskell/bin
/usr/local/{bin,sbin}
$path
)
Итак, из командной строки, когда я звоню which cabal
, я правильно получаю:/Users/g/Library/Haskell/bin/cabal
Когда я запускаю Emacs и перехожу на shell
вызовы which cabal
, я получаю: /usr/bin/cabal
что вызывает у меня проблемы, так как это другая версия.
Когда я проверяю echo $PATH
из Emacs shell
, я вижу:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/g/Library/Haskell/bin:/usr/local/sbin
Я понятия не имею, как на земле PATH
может быть иначе ...
Кто-нибудь знает, как заставить мою ZSH
оболочку и Emacs договориться об одном и том же PATH
? Я подозреваю, что именно это контролирует, откуда cabal
загружается.
ОБНОВИТЬ : Запуск echo $SHELL
из печати Emacs:/bin/zsh
ОБНОВЛЕНИЕ 2 : это на OSX .
ОБНОВЛЕНИЕ 3 : я пытался использовать модуль exec-path-from-shell, и он не работает. У меня все еще есть те же проблемы, и, как побочный эффект, он портит цвета моей терминальной темы :(
ОБНОВЛЕНИЕ 4 : Я установил Emacs через brew install --cocoa --srgb emacs
и запускаю emacs, который связан следующим образом:
~ ❯❯❯ which emacs
/usr/local/bin/emacs
~ ❯❯❯ l /usr/local/bin/emacs
lrwxr-xr-x 1 g admin 30B 29 Jan 18:34 /usr/local/bin/emacs -> ../Cellar/emacs/24.4/bin/emacs
~ ❯❯❯ l /usr/local/Cellar/emacs/24.4/bin/emacs
-r-xr-xr-x 1 g admin 87B 29 Jan 18:34 /usr/local/Cellar/emacs/24.4/bin/emacs
источник
chsh...
перезвонил в тот день, чтобы изменить мою оболочку по умолчанию~/.profile
или/etc/profile
затем.~/.zshenv
, которые будут поступать последовательно, независимо от того, запущена ли оболочка (интерактивная или неинтерактивная). Еслиexec-path-from-shell
это портя ваши терминальные цвета темы, вы можете установить ,exec-path-from-shell-arguments
чтобыnil
перед вызовом ,exec-path-from-shell-initialize
чтобы убедиться , что он не работает интерактивные части вашего ЗШ конфигурации.Ответы:
Вы также можете установить пакет exec-path-from-shell и добавить его в файл инициализации:
источник
Это проблема среды OSX, которая
$PATH
появляется в Emacs из/etc/paths
файла, который затем добавляется к тому, что я установил в оболочке. Я добавил/Users/g/Library/Haskell/bin
в начало/etc/paths
файла, и он работал нормально.Заходя в раковину и зовя
echo $PATH
в Emacs теперь показывает:/Users/g/Library/Haskell/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin
И
cabal
версия действительноcabal-install version 1.22.2.0
: DСпасибо всем!!
источник
$PATH
OSX .~/.zshenv
. Изменения там отражены в PATH Emacsecho export PATH=$PATH > ~/.zshenv
заставляет EmacsM-x shell
поднять его при следующем вызове.Если вы запустите emacs из среды GUI (gnome, kde, ...), ваши сценарии запуска оболочки не будут добавлены в вашу среду. Так
$PATH
что то, что вы аккуратно установили у себя.zsh
, не будет загружено. Среды графического интерфейса обычно не получают их, хотя они могут загрузить ваш~/.profile
файл.Вы можете попробовать добавить это к вашему
.pam_environment
:PATH DEFAULT=${PATH}:/MYHOMEDIR/Library/Haskell/bin:/usr/local/bin:/usr/local/sbin
Вам нужно будет перезапустить сеанс GUI, чтобы загрузить его.
Этот документ может помочь вам
$PATH
правильно установить переменную:https://help.ubuntu.com/community/EnvironmentVariables#Session-wide_environment_variables
Я использую этот
~/.pam_environment
файл для переменных управляемого окружения, которые мне нужны, чтобы они были доступны из процессов оболочки или emacs.PS: проницательный комментатор указывает, что вы, вероятно, на Mac. Я не знаю, как настроить ваш
$PATH
компьютер в графическом интерфейсе Mac, но все еще стоит вопрос о разнице между средой вашей оболочки и средой графического интерфейса. То, как вы настроили$PATH
графический интерфейс, зависит от версии ОС. Однако вы можете использовать:(setenv "PATH" (concat (getenv "PATH") ":/foo/bar"))
в вашем,
~/.emacs.d/init
если вы просто хотите решение, которое должно работать.PPS: Если вы хотите запустить оболочку в emacs, вам лучше использовать,
ansi-term
а неshell
.источник
Если какая-то часть PATH потеряна, вы можете добавить ее в ваш ~ / .emacs
Чтобы избежать проблем с PATH, я всегда запускаю emacs из командной строки, экспортируя PATH из ~ / .bashrc.
источник
Еще один способ сделать это - просто сообщить оболочке, что это оболочка входа в систему, чтобы получать все нужные файлы. Я делаю это для bash, установив
explicit-bash-args
в("--noediting" "--login")
. Похоже, что для zsh будет установленоexplicit-zsh-args
значение("-l")
.Так по моему
.emacs
:По вашему, что-то вроде:
Я думаю, что в
"--noediting"
этом нет необходимости, и, похоже, нет способа рассказать об этом zsh, но это может быть чем-то, что нужно исследовать, если это не сработает так, как вы надеетесь.источник
M-x shell-command
.Вы также можете установить путь по умолчанию для OS X, например, сохранив список свойств следующим образом
~/Library/LaunchAgents/my.startup.plist
:Новый путь должен отображаться в оболочках, Emacs и других приложениях после выхода и повторного входа.
Этот метод не изменяет путь в приложениях, которые открываются как элементы входа в систему или когда приложения открываются при входе в систему после принудительного завершения работы. Если у вас есть Emacs, терминальное приложение или другие приложения, в которых вы хотите изменить путь в элементах входа в систему, вам придется их удалить.
В 10.9 и более ранних версиях вы также можете добавить следующую строку
/etc/launchd.conf
:Однако поддержка
/etc/launchd.conf
была удалена в 10.10.источник