Sourcing .bashrc dentro do script não atualiza as variáveis env

0

Eu tenho um longo script de instalação que freqüentemente insere variáveis env em .bashrc para uso imediato e futuro, então fontes .bashrc para atualizar as variáveis env. No entanto, isso não está funcionando como pretendido. Ao contrário de quando executados independentemente no terminal, a execução desses comandos juntos como um script falha ao atualizar o ambiente atual.

Aqui está um pequeno exemplo:

echo export TEST_BASH=sup >> ~/.bashrc
source ~/.bashrc
echo $TEST_BASH

A linha final será impressa vazia em vez de 'sup' como pretendido. Por que isso?

    
por pir 15.11.2018 / 00:02

1 resposta

2

Seu arquivo ~/.bashrc detecta se está sendo originado por um shell interativo ou não interativo:

case $- in
    *i*) ;;
    *) return ;;
esac

Quando esse arquivo é originado de um script (que é um shell não interativo), a ramificação return é obtida e o arquivo não é executado no final.

Adicionar export declarações ao final do arquivo significaria que elas não seriam executadas quando originadas de um script.

A solução pode ser escrever as declarações de export em um arquivo separado e fonte do seu script (e possivelmente também de ~/.bashrc se você achar necessário).

    
por 15.11.2018 / 07:59