Avoir des problèmes avec les PATH
paramètres d'Emacs qui affectent mon environnement Haskell:
J'utilise ZSH, et quand je vais sur la ligne de commande et que j'appelle echo $PATH
, il renvoie:/Users/g/Library/Haskell/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin
Cela vient de la .zprofile
configuration où j'ai:
# Set the list of directories that Zsh searches for programs.
path=(
~/Library/Haskell/bin
/usr/local/{bin,sbin}
$path
)
Ainsi, à partir de la ligne de commande, lorsque j'appelle which cabal
, j'obtiens correctement:/Users/g/Library/Haskell/bin/cabal
Quand je démarre Emacs et que je vais sur shell
et j'appelle which cabal
, je reçois: /usr/bin/cabal
ce qui me pose problème car c'est une version différente.
Quand j'inspecte echo $PATH
depuis Emacs shell
, je vois:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/g/Library/Haskell/bin:/usr/local/sbin
Je ne sais pas comment ça PATH
peut être différent ...
Tout le monde sait comment obtenir mon ZSH
shell et Emacs d'accord sur le même sujet PATH
? Je soupçonne que c'est ce qui contrôle d'où cabal
vient le chargement.
MISE À JOUR : Exécution à echo $SHELL
partir des impressions Emacs:/bin/zsh
MISE À JOUR 2 : C'est sur OSX .
MISE À JOUR 3 : J'ai essayé d'utiliser le module exec-path-from-shell et cela ne fonctionne pas. J'ai toujours les mêmes problèmes, et comme effet secondaire, cela gâche les couleurs de mon thème de terminal :(
MISE À JOUR 4 : J'ai installé Emacs via brew install --cocoa --srgb emacs
et je lance emacs qui est lié de cette façon:
~ ❯❯❯ 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
la source
chsh...
rappelé dans la journée pour changer mon shell par défaut~/.profile
ou/etc/profile
ensuite.~/.zshenv
, qui proviendront de manière cohérente quel que soit le shell démarré (interactif ou non interactif). Siexec-path-from-shell
salit vos couleurs du thème du terminal, vous pouvez définirexec-path-from-shell-arguments
ànil
avant d' appelerexec-path-from-shell-initialize
pour vous assurer qu'il ne court pas les parties interactives de votre config zsh.Réponses:
Vous pouvez également installer le package exec-path-from-shell et l'ajouter à votre fichier init:
la source
Il s'agit d'un problème d'environnement OSX ennuyeux, l'
$PATH
apparence dans Emacs provient d'un/etc/paths
fichier, qui est ensuite ajouté avec tout ce que j'ai défini dans le shell. J'ai ajouté/Users/g/Library/Haskell/bin
en haut du/etc/paths
fichier et cela a bien fonctionné.Entrer dans le shell et appeler
echo $PATH
Emacs montre maintenant:/Users/g/Library/Haskell/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin
Et
cabal
la version est en effetcabal-install version 1.22.2.0
: DMerci a tous!!
la source
$PATH
sur OSX .~/.zshenv
. Les changements y sont reflétés dans le CHEMIN d'Emacsecho export PATH=$PATH > ~/.zshenv
incite Emacs à leM-x shell
reprendre lors de la prochaine invocation.Si vous démarrez emacs à partir de votre environnement GUI (gnome, kde, ...), vos scripts de démarrage du shell ne proviendront pas de votre environnement. Ainsi, le
$PATH
que vous avez soigneusement défini dans votre.zsh
ne sera pas chargé. Les environnements GUI ne génèrent généralement pas ces sources, bien qu'ils puissent charger votre~/.profile
fichier.Vous pouvez essayer d'ajouter ceci à votre
.pam_environment
:PATH DEFAULT=${PATH}:/MYHOMEDIR/Library/Haskell/bin:/usr/local/bin:/usr/local/sbin
Vous devrez redémarrer votre session GUI pour la charger.
Ce document peut vous aider à obtenir votre
$PATH
ensemble de variables correctement:https://help.ubuntu.com/community/EnvironmentVariables#Session-wide_environment_variables
J'utilise le
~/.pam_environment
fichier pour gérer les variables d'environnement dont j'ai besoin pour être accessible à partir de mes processus shell ou emacs.PS: Un commentateur astucieux souligne que vous êtes probablement sur Mac. Je ne sais pas comment configurer votre
$PATH
dans l'interface graphique de Mac, mais le point demeure concernant la différence entre l'environnement de votre shell et l'environnement GUI. La configuration$PATH
de l'interface graphique semble dépendre de la version du système d'exploitation. Cependant, vous pouvez utiliser:(setenv "PATH" (concat (getenv "PATH") ":/foo/bar"))
dans votre
~/.emacs.d/init
si vous voulez juste une solution qui devrait fonctionner.PPS: Si vous voulez exécuter un shell dans emacs, il vaut mieux utiliser
ansi-term
plutôt queshell
.la source
Si une partie du PATH est perdue, vous pouvez l'ajouter dans votre ~ / .emacs
Pour éviter les problèmes de PATH, je démarre toujours emacs à partir de la ligne de commande avec le PATH exporté de ~ / .bashrc.
la source
Une autre façon d'accomplir cela est de simplement dire au shell qu'il s'agit d'un shell de connexion afin qu'il source tous les bons fichiers. Je fais cela pour bash en définissant
explicit-bash-args
sur("--noediting" "--login")
. Il semble que l'équivalent de zsh soit définiexplicit-zsh-args
sur("-l")
.Donc dans mon
.emacs
:Dans le vôtre, quelque chose comme:
Je pense que ce
"--noediting"
n'est pas nécessaire, et il ne semble pas y avoir de moyen d'en parler à zsh, mais cela pourrait être quelque chose à étudier si cela ne fonctionne pas aussi bien que vous l'espérez.la source
M-x shell-command
.Vous pouvez également définir un chemin par défaut à l'échelle de l'OS X en enregistrant par exemple une liste de propriétés comme celle-ci en tant que
~/Library/LaunchAgents/my.startup.plist
:Le nouveau chemin doit être affiché dans les shells, Emacs et autres applications après vous être déconnecté et reconnecté.
Cette méthode ne modifie pas le chemin d'accès dans les applications ouvertes en tant qu'éléments de connexion ou lorsque les applications sont rouvertes à la connexion après un arrêt forcé. Si vous avez Emacs, une application de terminal ou d'autres applications dont vous souhaitez modifier le chemin dans les éléments de connexion, vous devrez les supprimer.
Dans 10.9 et versions antérieures, vous pouvez également ajouter une ligne comme celle-ci à
/etc/launchd.conf
:Cependant, le support pour a
/etc/launchd.conf
été supprimé en 10.10.la source