Le variabili d'ambiente non sono accessibili nello script bash


22

Ho riscontrato un problema strano. Ho inserito alcune variabili env .bashrce funziona come dovrebbe:

echo $HADOOP_HOME
/home/me/dist/hadoop

Ma la variabile env non è accessibile quando si eseguono script bash. Supponiamo di creare /tmp/sample.shcon il contenuto seguente:

#! /bin/bash
echo $HADOOP_HOME

Quando corro sopra lo script, fa eco a una riga vuota:

/tmp/sample.sh
   

1
Puoi mostrare la parte rilevante del tuo .bashrc? Suppongo che non stai exporting :, export HADOOP_HOME=/home/me/dist/hadoopquando esegui /tmpsample.sh` (che genera un nuovo bashcon un nuovo ambiente) HADOOP_HOME non è nel nuovo ambiente.
Giovanni N

Risposte:


29

Questo perché la HADOOP_HOMEvariabile non viene esportata:

$ 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 si esegue uno script di shell, quello script verrà eseguito nella propria istanza bash (è quello che #!/bin/bashfa) che è una shell figlio di quella corrente. Le variabili non vengono passate alle shell secondarie per impostazione predefinita, solo se vengono esportate. Pensa a ogni sessione di bash come indipendente (lo sono in gran parte). Di solito non si desidera che le variabili definite in uno inquinino l'ambiente di un altro. Per quei casi in cui è necessario, utilizzare export.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.