Variáveis ​​de ambiente não estão acessíveis no script bash

22

Encontrei um problema estranho. Coloquei algumas variáveis ​​env .bashrce funciona como deveria:

echo $HADOOP_HOME
/home/me/dist/hadoop

Mas a variável env não está acessível ao executar scripts bash. Suponha que eu crie /tmp/sample.shcom o conteúdo abaixo:

#! /bin/bash
echo $HADOOP_HOME

Quando executo o script acima, ecoa uma linha vazia:

/tmp/sample.sh
   
Mehraban
fonte
1
Você pode mostrar a parte relevante do seu .bashrc? Meu palpite é que você não está exporting :, export HADOOP_HOME=/home/me/dist/hadoopquando você executa o /tmpsample.sh` (que gera um novo bashcom um novo ambiente) HADOOP_HOME não está no novo ambiente.
John N

Respostas:

29

Isso HADOOP_HOMEocorre porque a variável não é exportada:

$ cat foo.sh
#!/bin/bash
echo "HADOOP_HOME: $HADOOP_HOME"


$ HADOOP_HOME=/home/me/dist/hadoop
$ echo $HADOOP_HOME
/home/me/dist/hadoop

$ foo.sh
HADOOP_HOME: 

$ export HADOOP_HOME
$ foo.sh
HADOOP_HOME: /home/me/dist/hadoop

Quando você executa um script de shell, esse script é executado em sua própria instância do bash (é o que #!/bin/bashfaz) que é um shell filho do atual. As variáveis ​​não são passadas para shells filhos por padrão, apenas se forem exportadas. Pense em cada sessão do bash como independente (elas são em grande parte). Você geralmente não deseja que variáveis ​​definidas em uma poluam o ambiente de outra. Nos casos em que isso for necessário, use export.

Terdon
fonte