Como redefinir um ambiente shell?

25

Esse problema está me incomodando há um tempo e, embora eu ache que encontrei minha resposta pelo EnvWatcher , infelizmente ele funciona apenas no Bash. E eu uso zsh.

Gostaria de replicar as coisas que o env-watcher faz, em menor grau, talvez, mas preciso saber se existe um comando pelo qual eu possa redefinir um shell para o estágio de inicialização limpo.

Por exemplo, eu gostaria de ter o seguinte fluxo de trabalho.

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

Existe uma possibilidade tão embutida ou estou perseguindo borboletas?

mhitza
fonte

Respostas:

32

Você poderia apenas exec zsh, o que lhe dará um zsh novo e executará novamente as funções init. Observe que você precisaria exec zsh -lde um zsh de login para manter seu status de "shell de login". Eu não sei o quão bem ele preserva o histórico de comandos (parece funcionar para mim, mas se você usar vários shells em diferentes terminais, poderá obter 'diafonia' entre o histórico dos dois shells)

Random832
fonte
4
Isso não desfaria variáveis ​​de ambiente exportadas, não é? (Embora qualquer que prepare-se pelo seu arquivo de inicialização seria reiniciado.)
CJM
Provavelmente não. Eu não tinha considerado esse aspecto porque não estava pensando nas variáveis ​​de ambiente como algo que você definiu temporariamente no shell.
Random832
15

Para variáveis de ambiente de desfazer exportado, você pode usar o envcomando env -i zsh. envexecuta o comando dado como argumento e -ifornece um ambiente limpo.

Dependendo da configuração, pode ser necessário para anexar -la zsh /  bash, a fim de carregar o seu .profile, e você também pode precisar de "bootstrap" seu ambiente com $HOMEpara que o shell sabe onde encontrar seus arquivos de inicialização. No total, isso se parece com:

env -i HOME="$HOME" zsh -l
Chris
fonte
11
Você pode precisar de alguns outros, como TERMe DISPLAY.
G-Man diz 'Reinstate Monica'