Come resettare un ambiente shell?


25

Questo problema mi ha infastidito per un po ', e anche se ho pensato di aver trovato la mia risposta tramite EnvWatcher , purtroppo funziona solo su Bash. E io uso zsh.

Vorrei replicare le cose che fa env-watcher, forse in misura minore, ma devo sapere se esiste un comando con il quale posso ripristinare una shell alla sua fase di avvio pulita.

Ad esempio, mi piacerebbe avere il seguente flusso di lavoro.

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

Esiste una possibilità così integrata o sto inseguendo le farfalle?

Risposte:


32

Potresti semplicemente exec zsh, che ti darà un nuovo zsh e rieseguire le funzioni di init. Si noti che è necessario che exec zsh -lzsh di accesso mantenga lo stato di "shell di accesso". Non so quanto preservi bene la cronologia dei comandi (sembra funzionare per me, ma se usi più shell in terminali diversi potresti ottenere un "crosstalk" tra la storia delle due shell)


4
Ciò non annullerebbe le variabili d'ambiente esportate, vero? (Anche se quelli che vengono impostati dal tuo file init verranno ripristinati.)
cjm

Probabilmente no. Non avevo considerato quell'aspetto perché non pensavo alle variabili d'ambiente come qualcosa che hai impostato temporaneamente nella shell.
Casuale 832,

15

Per annullare esportato variabili d'ambiente, è possibile utilizzare il envcomando di env -i zsh. envesegue il comando fornito come argomento e gli -iconferisce un ambiente pulito.

A seconda della configurazione, potrebbe essere necessario aggiungere -la zsh /  bashper caricare il tuo .profile, e si può anche avere bisogno di "bootstrap" il tuo ambiente con $HOMEmodo che la shell sa dove trovare i file di avvio. Complessivamente, sembra che:

env -i HOME="$HOME" zsh -l

1
Potresti aver bisogno di alcuni altri, come TERMe DISPLAY.
G-Man dice 'Reinstate Monica' il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.