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?

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)


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

1
Możesz potrzebować kilku innych, takich jak TERMi DISPLAY.
G-Man mówi „Przywróć Monikę”
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.