Jak zresetować środowisko powłoki?

25

Ten problem od dłuższego czasu mnie wkurza i chociaż myślałem, że znalazłem odpowiedź za pośrednictwem EnvWatchera , niestety działa tylko na Bash. I używam zsh.

Chciałbym powielić to, co robi env-watcher, może w mniejszym stopniu, ale muszę wiedzieć, czy istnieje polecenie, za pomocą którego mógłbym zresetować powłokę do stanu czystego rozruchu.

Na przykład chciałbym mieć następujący przepływ pracy.

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

Czy istnieje taka wbudowana możliwość, czy gonię motyle?

mhitza
źródło

Odpowiedzi:

32

Możesz po prostu exec zsh, co da ci świeże zsh i ponownie uruchomisz funkcje init. Pamiętaj, że musisz exec zsh -lmieć login zsh, aby zachować status „powłoki logowania”. Nie wiem, jak dobrze zachowuje historię poleceń (wydaje mi się, że to działa, ale jeśli używasz wielu powłok w różnych terminalach, możesz uzyskać przesłuch między historią dwóch powłok)

Losowo 832
źródło
4
To nie cofnęłoby eksportowanych zmiennych środowiskowych, prawda? (Chociaż wszystkie ustawione przez plik init zostaną zresetowane).
cjm
Prawdopodobnie nie. Nie brałem pod uwagę tego aspektu, ponieważ nie myślałem o zmiennych środowiskowych jako o czymś, co ustawiłeś tymczasowo w powłoce.
Random832
15

Aby cofnąć wyeksportowane zmienne środowiskowe, możesz użyć envpolecenia env -i zsh. envuruchamia polecenie podane jako argument i -idaje mu czyste środowisko.

W zależności od konfiguracji może być konieczne dołączenie -ldo zsh /  bashw celu załadowania .profile, a także może być konieczne „bootstrap” środowiska, $HOMEaby powłoka wiedziała, gdzie znaleźć pliki startowe. W sumie wygląda to następująco:

env -i HOME="$HOME" zsh -l
Chris
źródło
1
Możesz potrzebować kilku innych, takich jak TERMi DISPLAY.
G-Man mówi „Przywróć Monikę”