Einige Probleme mit PATH
Einstellungen auf Emacs, die sich auf meine Haskell-Umgebung auswirken:
Ich verwende ZSH. Wenn ich zur Befehlszeile gehe und aufrufe, wird Folgendes zurückgegeben echo $PATH
:/Users/g/Library/Haskell/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin
Dies kommt von der .zprofile
Konfiguration, wo ich habe:
# Set the list of directories that Zsh searches for programs.
path=(
~/Library/Haskell/bin
/usr/local/{bin,sbin}
$path
)
Wenn ich also über die Befehlszeile anrufe, which cabal
erhalte ich Folgendes richtig:/Users/g/Library/Haskell/bin/cabal
Wenn ich Emacs starte und zu shell
und anrufe which cabal
, bekomme ich: /usr/bin/cabal
was mir Probleme bereitet, da es eine andere Version ist.
Wenn ich echo $PATH
vom Emacs aus inspiziere shell
, sehe ich:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/g/Library/Haskell/bin:/usr/local/sbin
Ich habe keine Ahnung, wie um PATH
alles in der Welt das anders sein kann ...
Weiß jemand, wie man meine ZSH
Shell und Emacs dazu bringt, sich auf dasselbe zu einigen PATH
? Ich vermute, das ist es, was steuert, woher cabal
geladen wird.
UPDATE : Ausführen echo $SHELL
von Emacs-Ausdrucken:/bin/zsh
UPDATE 2 : Dies ist unter OSX .
UPDATE 3 : Ich habe versucht, das Exec-Path-From-Shell- Modul zu verwenden, aber es funktioniert nicht. Ich habe immer noch die gleichen Probleme und als Nebeneffekt bringt es meine Terminal-Designfarben durcheinander :(
UPDATE 4 : Ich habe Emacs über installiert brew install --cocoa --srgb emacs
und starte Emacs, das folgendermaßen verknüpft ist:
~ ❯❯❯ 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
quelle
chsh...
~/.profile
oder/etc/profile
dann.~/.zshenv
, die beim Starten der Shell konsistent bezogen werden (interaktiv oder nicht interaktiv). Wenn dieexec-path-from-shell
Farben Ihres Terminaldesigns durcheinander geraten, können Sie vor dem Aufruf die Option einstellenexec-path-from-shell-arguments
, um sicherzustellen, dass die interaktiven Teile Ihrer zsh-Konfiguration nicht ausgeführt werden.nil
exec-path-from-shell-initialize
Antworten:
Sie können auch installieren Paket exec-path-from-shell Folgendes zu Ihrer Init-Datei hinzufügen:
quelle
Dies ist ein ärgerliches OSX-Problem
$PATH
in Emacs auftretende stammt aus einer/etc/paths
Datei, an die dann alles angehängt wird, was ich in der Shell festgelegt habe. Ich/Users/g/Library/Haskell/bin
habe oben in der/etc/paths
Datei hinzugefügt und es hat dann gut funktioniert.Wenn Sie in die Shell gehen und
echo $PATH
Emacs aufrufen , sehen Sie jetzt:/Users/g/Library/Haskell/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin
Und
cabal
die Version ist in der Tatcabal-install version 1.22.2.0
: DVielen Dank an alle !!
quelle
$PATH
OSX- Beitrag .~/.zshenv
. Die dortigen Änderungen spiegeln sich in Emacs 'PATHecho export PATH=$PATH > ~/.zshenv
EmacsM-x shell
es einfach beim nächsten Aufruf abholt.Wenn Sie Emacs über Ihre GUI-Umgebung (Gnome, KDE, ...) starten, werden Ihre Shell-Startskripte nicht in Ihre Umgebung importiert. Also das
$PATH
, was du sorgfältig in deine.zsh
haben, nicht geladen. GUI-Umgebungen geben diese im Allgemeinen nicht als Quelle aus, obwohl sie möglicherweise Ihre~/.profile
Datei laden .Sie können versuchen, dies zu Ihrem hinzuzufügen
.pam_environment
:PATH DEFAULT=${PATH}:/MYHOMEDIR/Library/Haskell/bin:/usr/local/bin:/usr/local/sbin
Sie müssen Ihre GUI-Sitzung neu starten, um sie zu laden.
Dieses Dokument hilft Ihnen möglicherweise dabei, Ihre
$PATH
Variablen richtig festzulegen:https://help.ubuntu.com/community/EnvironmentVariables#Session-wide_environment_variables
Ich verwende die
~/.pam_environment
Datei, um Umgebungsvariablen zu verwalten, auf die ich von meinen Shell- oder Emacs-Prozessen aus zugreifen muss.PS: Ein scharfsinniger Kommentator weist darauf hin, dass Sie sich wahrscheinlich auf einem Mac befinden. Ich weiß nicht, wie Sie Ihre
$PATH
in der Mac-GUI einrichten sollen , aber der Punkt bezieht sich immer noch auf den Unterschied zwischen der Umgebung Ihrer Shell und der GUI-Umgebung. Wie Sie die$PATH
für die GUI einrichten, scheint von der Betriebssystemversion abzuhängen. Sie können jedoch Folgendes verwenden:(setenv "PATH" (concat (getenv "PATH") ":/foo/bar"))
in deinem
~/.emacs.d/init
wenn du nur eine lösung willst die funktionieren soll.PPS: Wenn Sie eine Shell in Emacs ausführen möchten, ist es wahrscheinlich besser, sie zu verwenden
ansi-term
alsshell
.quelle
Wenn ein Teil des PFADS verloren geht, können Sie ihn in Ihre ~ / .emacs einfügen
Um PATH-Probleme zu vermeiden, starte ich Emacs immer von der Kommandozeile mit dem aus ~ / .bashrc exportierten PATH.
quelle
Eine andere Möglichkeit, dies zu erreichen, besteht darin, der Shell einfach mitzuteilen, dass es sich um eine Anmeldeshell handelt, sodass sie alle richtigen Dateien bezieht. Ich tue dies für bash , indem
explicit-bash-args
an("--noediting" "--login")
. Es sieht aus wie das Äquivalent für zsh zu Satz wäreexplicit-zsh-args
zu("-l")
.Also in meinem
.emacs
:In deinem, etwas wie:
Ich denke, das
"--noediting"
ist unnötig, und es scheint keine Möglichkeit zu geben, zsh darüber zu erzählen, aber das könnte etwas zu untersuchen sein, wenn dies nicht so gut funktioniert, wie Sie es sich erhoffen.quelle
M-x shell-command
.Sie können auch einen OS X-weiten Standardpfad festlegen, indem Sie beispielsweise eine Eigenschaftsliste wie die folgende speichern
~/Library/LaunchAgents/my.startup.plist
:Der neue Pfad sollte in Shells, Emacs und anderen Anwendungen angezeigt werden, nachdem Sie sich ab- und wieder angemeldet haben.
Diese Methode ändert den Pfad in Anwendungen, die als Anmeldeelemente geöffnet werden, oder wenn Anwendungen nach einem erzwungenen Herunterfahren beim Anmelden erneut geöffnet werden, nicht. Wenn Sie über Emacs, eine Terminalanwendung oder andere Anwendungen verfügen, in denen Sie den Pfad in Anmeldeelementen ändern möchten, müssen Sie diese entfernen.
In 10.9 und früheren Versionen können Sie auch eine Zeile wie die folgende hinzufügen
/etc/launchd.conf
:Die Unterstützung für
/etc/launchd.conf
wurde jedoch in 10.10 entfernt.quelle