Quero complementar a resposta de ravi :
Esse comportamento é específico ao Ubuntu (e provavelmente à maioria das distribuições derivadas), pois o ~/.bashrcarquivo padrão inicia com um curto-circuito, o Ubuntu 18.04, por exemplo:
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
Isso interromperá a avaliação do arquivo se ele estiver em execução em um shell não interativo, que é o caso do seu script, pois todos os scripts são executados em um shell não interativo e, subsequentemente, em todos os arquivos que você sourceherdará essa propriedade.
eval hackear
Eu descobri um truque feio para solucionar o Ubuntu especificamente, usando em evalvez de source:
eval "$(cat ~/.bashrc | tail -n +10)"
Ele simplesmente pula as poucas primeiras linhas e avalia o restante, ~/.bashrcpara que o restante seja avaliado e modifique a execução atual.
Esteja ciente de que é um número mágico e pode não funcionar nas versões do Ubuntu; mas pode ser uma boa solução se você estiver criando scripts para sistemas mais ou menos conhecidos.
Uma solução mais sofisticada pode envolver o uso de regex para direcionar os bits específicos que interrompem a avaliação.
Alternativa de Shebang
Outra alternativa que pode funcionar melhor em alguns cenários é forçar a execução do script em um shell interativo adicionando um sinalizador no shebang :
#!/bin/bash -i
Esteja ciente de algumas coisas: