Approvisionnement d'un script shell à partir d'Emacs

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:

  1. Je commence Emacs de zsh
  2. Je voudrais LD_LIBRARY_PATH un script zsh partir d'Emacs qui modifie les variables d'environnement telles que LD_LIBRARY_PATH

Context:

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.

Expérience

J'utilise vim mais la même chose devrait s'appliquer à emacs . Exemple de file à la source.

 $ more ~/vars.bash export VAR=somevalue 
  1. Environnement parent initial, $VAR est désactivé

     $ echo $VAR $ 
  2. 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 
  3. 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