Como você está executando o script? As circunstâncias da saída de um subprocesso não devem afetar o shell que o executou ... a menos que você esteja enviando o script para o shell em execução.
Por exemplo ...
./my-script.sh # this should terminate and leave your shell intact
. my-script.sh # this might terminate and take your shell with it
Um shell 'nix é um processo em execução de algum interpretador de shell (por exemplo, bash , ksh , csh ). "source" de um script (que você pode fazer em bash com o comando source ou seu alias . ) diz ao interpretador para abrir o arquivo indicado e processar seu conteúdo. Com efeito, o script se torna um atalho para inserir comandos de forma interativa. Funções definidas, variáveis definidas e (no seu caso) exit s processadas têm efeito no shell original.
./my-script.sh é um caminho de arquivo simples. ./ refere-se ao diretório atual e my-script.sh a um script dentro desse diretório. Quando o arquivo é marcado como executável, o arquivo será executado. No caso de um script, isso significa iniciar um novo processo de intérprete (conforme definido pela linha #! na parte superior do script ou /bin/sh por padrão) e usá-lo para interpretar o script. Funções definidas, variáveis definidas e exit s processadas são confinadas a esse novo processo de intérprete.