Comment réinitialiser un environnement shell?

25

Ce problème me dérange depuis un certain temps, et bien que je pense avoir trouvé ma réponse via EnvWatcher , malheureusement, cela ne fonctionne que sur Bash. Et j'utilise zsh.

Je voudrais reproduire les choses que fait env-watcher, dans une moindre mesure peut-être, mais j'ai besoin de savoir s'il existe une commande par laquelle je pourrais réinitialiser un shell à son stade de démarrage propre.

Comme par exemple, j'aimerais avoir le workflow suivant.

source some-functions
alias another-thing
export SVN_EDITOR=vim
RESET-ZSH # none of the above are valid any more

Existe-t-il une telle possibilité intégrée ou suis-je en train de chasser les papillons?

mhitza
la source

Réponses:

32

Vous pourriez juste exec zsh, ce qui vous donnera un nouveau zsh et réexécutera les fonctions init. Notez que vous auriez besoin d' exec zsh -lun zsh de connexion pour conserver son statut de "shell de connexion". Je ne sais pas à quel point il préserve l'historique des commandes (cela semble fonctionner pour moi, mais si vous utilisez plusieurs shells dans différents terminaux, vous pourriez obtenir une `` diaphonie '' entre l'historique des deux shells)

Aléatoire832
la source
4
Cela n'annulerait pas les variables d'environnement exportées, n'est-ce pas? (Bien que ceux qui sont définis par votre fichier init soient réinitialisés.)
cjm
Probablement pas. Je n'avais pas considéré cet aspect parce que je ne pensais pas aux variables d'environnement comme quelque chose que vous définissez temporairement dans le shell.
Random832
15

Pour annuler les variables d'environnement exportées, vous pouvez utiliser la envcommande env -i zsh. envexécute la commande donnée en argument et -ilui donne un environnement propre.

En fonction de votre configuration, vous devrez peut-être ajouter -là zsh /  bashafin de charger votre .profile, et vous devrez peut-être également "bootstrap" votre environnement $HOMEafin que le shell sache où trouver vos fichiers de démarrage. Au total, cela ressemble à ceci:

env -i HOME="$HOME" zsh -l
Chris
la source
1
Vous pourriez avoir besoin de quelques autres, comme TERMet DISPLAY.
G-Man dit `` Réintègre Monica '' le