O erro vem da tentativa de executar o arquivo ~/.profile com sh , que não entende source ( sh usa . (ponto), que também funciona em bash e todos os outros Cartuchos POSIX).
Além disso, executar ~/.profile não irá definir as variáveis de ambiente que este arquivo define no shell que o executa. Isso ocorre porque ele é executado em sua própria sub-rede.
Um shell filho (que é o que você obtém quando executa ~/.profile em vez de fazer o sourcing) nunca afetará o ambiente do shell pai (o shell do qual você executa o script). Portanto, você não pode definir variáveis em ~/.profile e esperar que elas sejam definidas em seu script, a menos que você source o arquivo.
A execução de sudo source ~/.profile não ajudará aqui, pois sudo será um processo filho do shell atual.
Informações adicionais relacionadas:
Para configurar o ambiente para um script que não é executado a partir de um shell interativo (em que ~/.profile e ~/.bashrc já são originados), defina a variável BASH_ENV para o arquivo apropriado ao invocar o script. Isso fará o bash fornecer o arquivo $BASH_ENV antes de passar o controle para o seu script.
Por exemplo:
BASH_ENV="$HOME/.profile" "$HOME/scripts/myscript.sh"
Isso é apenas necessário se invocar o script a partir de uma sessão de shell não interativa, como uma tarefa cron, e se você precisar acessar variáveis de ambiente configuradas em ~/.profile ou qualquer arquivo que ~/.profile sources.
Em uma sessão de shell interativa, a variável BASH_ENV não precisa ser definida dessa forma, e o script não precisa originar ~/.bashrc nor ~/.profile , pois eles já foram originados.