.bashrc
é executado apenas por shells interativos, não por scripts¹. É o lugar errado para definir variáveis de ambiente. Veja Existe um arquivo equivalente ".bashrc" lido por todos os shells? e o wiki do Ubuntu .
Você pode dizer ao bash para ler .bashrc
explicitamente. É claro que você terá que executar bash
, não sh
, que pode ser um shell diferente:
sudo -i -u username bash -c '. '~/.bashrc; echo "$MY_ENV"'
Mas é uma má ideia porque os arquivos .bashrc
provavelmente contêm coisas que assumem que são executadas em um terminal e que gastam tempo configurando associações de teclas, aliases, prompts, etc.
A solução sã é colocar as definições de variáveis de ambiente onde elas pertencem, em ~/.profile
ou ~/.pam_environment
.
¹ Exceto quando o bash é chamado por sshd
por algum motivo estranho.