Alguns comandos do shell (como cd
) afetam o shell atual e seus processos filhos / descendentes, mas não podem afetar o shell pai.
Quando você executa um script como um comando comum
(por exemplo, scriptname.sh
ou ./scriptname.sh
)
ele é executado em um processo de shell separado.
Quando esse processo de shell termina, os efeitos desses comandos desaparecem.
É por isso que os scripts como o seu geralmente terminam com exec sh
, exec bash
, exec zsh
,
ou o que for - isso faz com que o processo que está no novo ambiente persista,
como um shell interativo.
Se você não quiser fazer dessa maneira, a única outra abordagem é executar o script em seu shell principal e interativo. No bash, você pode fazer isso com
source scriptname.sh
ou
. scriptname.sh
(talvez seja necessário usar ./scriptname.sh
se o script estiver no diretório atual.)
Tenho certeza que zsh
tem a mesma funcionalidade.
A sintaxe pode ser diferente; verifique a documentação do seu shell.
Se você tiver dificuldade em lembrar de fazer isso (ou se isso for complicado), considerando definir um alias para ele.