No linux, como podemos alterar as variáveis de ambiente bash usando o script initialize?

0

Sabemos que podemos alterar as variáveis de ambiente do bash, por exemplo PATH , usando o script initialize, por exemplo, .bashrc . Apenas escrevendo PATH=<VALUE> e você conseguirá o que deseja.

Mas, considere este problema:

Temos um script bash chamado rc :

#!/bin/bash  

mySite="superUser"
export mySite
echo "the value of mySite is: $mySite"

Em seguida, declaramos a variável mySite , executamos o script rc e, em seguida, verificamos o valor da variável:

$ declare -x mySite="super"
$ ./rc 
the value of mySite is: superUser
$ echo $mySite
super

O valor ainda é super . podemos concluir que shell filho não pode alterar a variável do shell pai diretamente usando a instrução como VARIALBENAME=VLAUE ?

Nosso script rc é igual a .bashrc , e como podemos alterar o valor da variável de ambiente do bash colocando o PATH=<VLAUE> nele, para quando a execução de .bashrc terminar, a variável da chamada shell ainda não foi alterado?

    
por Yishu Fang 28.10.2012 / 09:44

1 resposta

3

As variáveis de ambiente são herdadas ... e os processos pai não herdam nada de seus filhos (funciona na outra direção).

No seu primeiro caso, o processo bash que lê o arquivo rc é o mesmo processo no qual você usa a variável, ou seu ancestral.

No seu segundo caso, o processo de leitura do arquivo é o filho do seu shell. Existem 3 maneiras de contornar isso:

  1. faça com que seu script inicie um novo shell, que herda as variáveis. Seu shell original será retomado (com seu ambiente original) quando você sair
  2. source o script rc em vez de executá-lo:

    . ./rc
    

    ou

    source ./rc
    

    instrui seu shell atual a ler o script em si (em vez de executá-lo em um filho) e depois retomar

  3. avalie explicitamente a saída (como geralmente é feito com ssh-agent , por exemplo)

    eval './rc'
    

    onde rc mudou para

    #!/bin/bash
    echo "export mySite=\"superUser\""
    
por 28.10.2012 / 10:03