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.