Problemy z PATH
ustawieniami Emacsa, które wpływają na moje środowisko Haskell:
Korzystam z ZSH, a kiedy idę do linii poleceń i dzwonię echo $PATH
, zwraca:/Users/g/Library/Haskell/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin
Pochodzi z .zprofile
konfiguracji, w której mam:
# Set the list of directories that Zsh searches for programs.
path=(
~/Library/Haskell/bin
/usr/local/{bin,sbin}
$path
)
Tak więc z linii poleceń, kiedy dzwonię which cabal
, poprawnie otrzymuję:/Users/g/Library/Haskell/bin/cabal
Kiedy uruchamiam Emacsa i przechodzę do shell
i dzwonię which cabal
, dostaję: /usr/bin/cabal
co powoduje problem, ponieważ jest to inna wersja.
Kiedy sprawdzam echo $PATH
z Emacsa shell
, widzę:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/g/Library/Haskell/bin:/usr/local/sbin
Nie mam pojęcia, jak, u licha, PATH
może być inaczej ...
Czy ktoś wie, jak sprawić, by mój ZSH
shell i Emacs zgodzili się na to samo PATH
? Podejrzewam, że to właśnie kontroluje, skąd cabal
jest ładowany.
AKTUALIZACJA : Uruchamianie echo $SHELL
z wydruków Emacsa:/bin/zsh
AKTUALIZACJA 2 : To jest na OSX .
AKTUALIZACJA 3 : Próbowałem użyć modułu exec-path-from-shell i nie działa. Nadal mam te same problemy, a efektem ubocznym jest popsucie kolorów terminalu:
AKTUALIZACJA 4 : Zainstalowałem Emacsa przez brew install --cocoa --srgb emacs
i uruchamiam emacsa, który jest połączony w ten sposób:
~ ❯❯❯ 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
źródło
chsh...
w ciągu dnia, aby zmienić domyślną powłokę~/.profile
lub/etc/profile
później.~/.zshenv
, które będą konsekwentnie pozyskiwane, jednak powłoka zostanie uruchomiona (interaktywna vs. nieinteraktywna). Jeśliexec-path-from-shell
jest brudząc się twój terminal kolorów motywu, można ustawićexec-path-from-shell-arguments
, abynil
przed skontaktowaniemexec-path-from-shell-initialize
się upewnić, że nie jest uruchomiony interaktywnych części swojego zsh config.Odpowiedzi:
Możesz także zainstalować pakiet exec-path-from-shell i dodać go do pliku init:
źródło
Jest to irytujący problem środowiskowy OSX,
$PATH
pojawienie się w Emacsie pochodzi z/etc/paths
pliku, który następnie dołącza się do wszystkiego, co ustawiłem w powłoce. Dodałem/Users/g/Library/Haskell/bin
na początku/etc/paths
pliku, a następnie działał dobrze.Przechodzenie do powłoki i wywoływanie
echo $PATH
Emacsa pokazuje teraz:/Users/g/Library/Haskell/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin
I
cabal
„s wersja jest rzeczywiściecabal-install version 1.22.2.0
: DDziękuje wszystkim!!
źródło
$PATH
na OSX .~/.zshenv
. Zmiany w tym odzwierciedlone są w ŚCIEŻCE Emacsaecho export PATH=$PATH > ~/.zshenv
sprawia, że EmacsM-x shell
odbiera to przy następnym wywołaniu.Jeśli uruchomisz emacsa ze swojego środowiska GUI (gnome, kde, ...), twoje skrypty startowe nie będą pozyskiwane z twojego środowiska. Więc to
$PATH
, co dokładnie ustawiłeś.zsh
, nie zostanie załadowane. Środowiska GUI nie generują ich na ogół, chociaż mogą załadować~/.profile
plik.Możesz spróbować dodać to do
.pam_environment
:PATH DEFAULT=${PATH}:/MYHOMEDIR/Library/Haskell/bin:/usr/local/bin:/usr/local/sbin
Musisz ponownie uruchomić sesję GUI, aby ją załadować.
Ten dokument może pomóc w
$PATH
prawidłowym ustawieniu zmiennej:https://help.ubuntu.com/community/EnvironmentVariables#Session-wide_environment_variables
Używam tego
~/.pam_environment
pliku do zarządzania zmiennymi środowiskowymi, które muszą być dostępne z procesów powłoki lub emacsa.PS: Zręczny komentator wskazuje, że prawdopodobnie korzystasz z komputera Mac. Nie wiem, jak skonfigurować
$PATH
interfejs GUI na komputerze Mac, ale nadal pozostaje kwestia różnicy między środowiskiem powłoki a środowiskiem GUI. Sposób konfiguracji$PATH
GUI wydaje się zależeć od wersji systemu operacyjnego. Możesz jednak użyć:(setenv "PATH" (concat (getenv "PATH") ":/foo/bar"))
W twojej
~/.emacs.d/init
jeśli chcesz tylko rozwiązanie, które powinno działać.PPS: Jeśli chcesz uruchomić powłokę w emacsie, prawdopodobnie lepiej jest użyć
ansi-term
zamiastshell
.źródło
Jeśli jakaś część ŚCIEŻKI zostanie zgubiona, możesz dodać ją do ~ / .emacs
Aby uniknąć problemów ze ŚCIEŻKĄ, zawsze uruchamiam emacsa z wiersza poleceń z ŚCIEŻKĄ wyeksportowaną z ~ / .bashrc.
źródło
Innym sposobem na osiągnięcie tego jest po prostu powiedzenie powłoce, że jest to powłoka logowania, aby pozyskała wszystkie właściwe pliki. Robię to dla bash, ustawiając
explicit-bash-args
na("--noediting" "--login")
. Wygląda na to, że odpowiednikiem dla zsh byłoby ustawienieexplicit-zsh-args
na("-l")
.Więc w moim
.emacs
:W twoim coś takiego:
Myślę, że
"--noediting"
jest to niepotrzebne i wydaje się, że nie ma sposobu, aby powiedzieć o tym Zsh, ale może to być coś do zbadania, jeśli to nie zadziała tak, jak można oczekiwać.źródło
M-x shell-command
.Możesz również ustawić domyślną ścieżkę dla całego systemu OS X, na przykład zapisując listę właściwości w następujący sposób
~/Library/LaunchAgents/my.startup.plist
:Nowa ścieżka powinna zostać pokazana w powłokach, Emacsie i innych aplikacjach po wylogowaniu i ponownym zalogowaniu.
Ta metoda nie zmienia ścieżki w aplikacjach, które są otwierane jako elementy logowania lub gdy aplikacje są ponownie otwierane podczas logowania po wymuszonym wyłączeniu. Jeśli masz Emacsa, aplikację terminalową lub inne aplikacje, w których chcesz zmienić ścieżkę w elementach logowania, musisz je usunąć.
W wersji 10.9 i wcześniejszych możesz również dodać taką linię do
/etc/launchd.conf
:Jednak wsparcie dla
/etc/launchd.conf
zostało usunięte w 10.10.źródło