You can add this to your `init.vim`:

```
function! s:termclose() abort
  let buf = expand('#')
  if !empty(buf) && buflisted(buf) && bufnr(buf) != bufnr('%')
    execute 'autocmd BufWinLeave <buffer> split' buf
  endif
endfunction

autocmd TermClose *:$SHELL,*:\$SHELL call s:termclose()
```

(It is recommended to use a group for the auto command).

In Neovim terminal buffers are normal buffer's and when they close, `:bdelete` is executed, and `:bdelete`'s behaviour is weird if you ask me. Anyway [there are plans to definitely fix it](https://github.com/neovim/neovim/issues/5176#issuecomment-258391491)