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 .