Je voudrais générer un script shell qui modifie mes variables d'environnement depuis Emacs. C'est-à-dire que j'aimerais que le script shell modifie l'environnement dans lequel s'exécute Emacs, et j'aimerais le faire depuis une session d'Emacs en cours d'exécution.
En d'autres termes:
zsh
LD_LIBRARY_PATH
un script zsh
partir d'Emacs qui modifie les variables d'environnement telles que LD_LIBRARY_PATH
Ceci est une tentative pour contourner le problème que j'ai décrit ici , où j'ai besoin de définir LD_LIBRARY_PATH
pour exécuter Emacs, mais j'ai besoin de l' annuler pour exécuter une dissortingbution spécifique de Python ( Anaconda ).
Plus précisément, je veux utiliser un package Emacs ( emacs-jedi ) qui nécessite l'access à cette dissortingbution Python, mais pour l'instant, je dois LD_LIBRARY_PATH
pour démarrer Emacs, donc je LD_LIBRARY_PATH
configurer plus tard pour pouvoir utiliser emacs-jedi
de l'intérieur d'Emacs.
Est-ce possible?
Je ne crois pas que cela soit possible, puisque chaque fois que vous appelez un sous-shell pour extraire le script, vous appelez un process enfant à partir du process d'origine où les applications emacs ont été lancées.
L'export de variables d'environnement est une voie à sens unique où seul le parent peut fournir des variables à tous les process enfants, mais aucun process enfant ne peut manipuler l'environnement du parent.
J'utilise vim
mais la même chose devrait s'appliquer à emacs
. Exemple de file à la source.
$ more ~/vars.bash export VAR=somevalue
Environnement parent initial, $VAR
est désactivé
$ echo $VAR $
Lancer vim
. Invoquez ensuite un sous-shell pour searchr le file ci-dessus ( :sh
).
# check variable $ echo $VAR $ # source and re-check $ source ~/vars.bash $ echo $VAR somevalue
Sous-shell de sortie, returnne à vim. Puis invoquez un autre sous-shell ( :sh
).
$ exit ... back in vim, do another `:sh` ... # check variable $ echo $VAR $
Si tout ce dont vous avez besoin est de désactiver LD_LIBRARY_PATH après avoir chargé Emacs, ajoutez simplement
(setenv "LD_LIBRARY_PATH")
à ~/.emacs
ou autre file init.
Si vous devez permuter, enregistrez d'abord le résultat de (getenv "LD_LIBRARY_PATH")
dans une variable afin de pouvoir le restaurer plus tard.
J'ai trouvé ce joli morceau d'emacs lisp qui utilise diff
pour comparer les sorties de export
command d' export
avant et après l'approvisionnement, puis appelle la fonction setenv
conséquence: https://gist.github.com/ffevotte/9345586