Você pode recolher seus 2 comandos exec em um único comando como:
exec tcsh -c zsh
Você pode atualizar o ambiente em seu processo zsh atual usando:
eval $(env -i tcsh -c env)
Usar env -i
faria com que o seguinte comando fosse executado com um ambiente vazio. Isso executa o tcsh para processar os arquivos de inicialização. A opção -c
para tcsh executa outra cópia de env
, mas desta vez sem um comando, apenas imprime o conteúdo atual do ambiente definido pelo tcsh. Em seguida, o eval $(...)
faz com que o zsh analise essa saída.
No meu teste, o uso de env -i
é necessário para evitar que o zsh tente definir variáveis de ambiente que foram definidas por ele mesmo, incluindo a variável _
, que é somente leitura. Essa tentativa fez com que o eval falhasse sem processar pelo menos parte da saída.