recarrega todas as instâncias do zsh em execução

6

Eu normalmente tenho na ordem de uma dúzia de processos zsh em execução. Quando eu edito meus arquivos de configuração, eu gostaria de uma maneira limpa de fazer com que todos eles sejam reinicializados. Idealmente, isso não significaria matá-los completamente e reiniciar, pois isso perde meu diretório de trabalho, quaisquer variáveis de shell que eu defini localmente, aliases temporários etc. Em um determinado shell, posso exec "${SHELL}" e isso funciona bem, mas quero uma maneira de forçar todas as instâncias zsh ativas sob meu login para fazer isso.

    
por Peter Lyons 15.12.2014 / 19:36

1 resposta

3

Você pode definir uma função de interceptação:

TRAPUSR1() {
  if [[ -o INTERACTIVE ]]; then
     {echo; echo execute a new shell instance } 1>&2
     exec "${SHELL}"
  fi
}

Esta função é chamada quando o shell em execução captura um sinal USR1 , iniciado por kill -USR1 <PID> . Ele verifica se a instância zsh em execução é interativa e, em caso afirmativo, a substitui por uma nova. +

Portanto, para atualizar toda a sua sessão interativa zsh em execução, basta usar

killall -USR1 zsh

Mas lembre-se de que, se você estiver executando instâncias de zsh sem a função TRAPUSR1() definida, elas sairão em USR1 ! É por isso que você deve definir a interceptação em /etc/zshenv , pois esse é o único arquivo lido por todas as instâncias zsh, + incluindo scripts e sessões iniciadas com zsh -f .

+ Créditos vão para @Adaephon, que apontou isso em um comentário .

    
por 15.12.2014 / 20:34

Tags