Quero complementar a resposta de ravi :
Esse comportamento é específico ao Ubuntu (e provavelmente à maioria das distribuições derivadas), pois o ~/.bashrc
arquivo 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ê source
herdará essa propriedade.
eval
hackear
Eu descobri um truque feio para solucionar o Ubuntu especificamente, usando em eval
vez de source
:
eval "$(cat ~/.bashrc | tail -n +10)"
Ele simplesmente pula as poucas primeiras linhas e avalia o restante, ~/.bashrc
para 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: