Las variables de entorno no son accesibles en el script bash

22

Me encontré con un problema extraño. Puse algunas variables env .bashrcy funciona como debería:

echo $HADOOP_HOME
/home/me/dist/hadoop

Pero la variable env no es accesible cuando se ejecutan scripts bash. Supongamos que creo /tmp/sample.shcon el siguiente contenido:

#! /bin/bash
echo $HADOOP_HOME

Cuando ejecuto el script anterior, repite una línea vacía:

/tmp/sample.sh
   
Mehraban
fuente
1
¿Puedes mostrar la parte relevante de tu .bashrc? Supongo que no estás exporting: export HADOOP_HOME=/home/me/dist/hadoopcuando ejecutas /tmpsample.sh` (que genera bashun nuevo entorno con un nuevo entorno) HADOOP_HOME no está en el nuevo entorno.
John N

Respuestas:

29

Eso es porque la HADOOP_HOMEvariable no se exporta:

$ 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

Cuando ejecuta un script de shell, ese script se ejecutará en su propia instancia de bash (eso es lo que #!/bin/bashhace) que es un shell secundario del actual. Las variables no se pasan a los shells secundarios de forma predeterminada, solo si se exportan. Piense en cada sesión de bash como independiente (en gran medida lo son). Por lo general, no desea que las variables definidas en una contaminen el entorno de otra. Para aquellos casos donde sea necesario, use export.

terdon
fuente