Como redefinir um ambiente de shell?

19

Esse problema tem me incomodado há algum tempo e, embora eu tenha achado que encontrei minha resposta por meio do EnvWatcher , infelizmente só funciona no Bash. E eu uso zsh.

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

Por exemplo, 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 tal possibilidade, ou estou perseguindo borboletas?

    
por mhitza 13.06.2011 / 04:04

2 respostas

27

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

    
por 13.06.2011 / 04:24
12

Para desfazer as variáveis de ambiente exportadas, você pode usar o env command env -i zsh . env executa o comando fornecido como argumento e -i fornece um ambiente limpo.

Dependendo da sua configuração, talvez seja necessário adicionar -l a zsh / bash para carregar seu .profile , e você também pode precisar "fazer o bootstrap" do seu ambiente com $HOME para que o shell sabe onde encontrar seus arquivos de inicialização. Ao todo, isso parece:

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

Espero que ajude alguém!

    
por 09.07.2015 / 23:26