I ran into a weird problem. I put some env variables into .bashrc
and it works as it should:
echo $HADOOP_HOME
/home/me/dist/hadoop
But the env variable is not accessible when executing bash scripts. Suppose I create /tmp/sample.sh
with below content:
#! /bin/bash
echo $HADOOP_HOME
When I run above script, echoes an empty line:
/tmp/sample.sh
That's because the
HADOOP_HOME
variable isn't exported:When you run a shell script, that script will run in its own bash instance (that's what the
#!/bin/bash
does) that is a child shell of the current one. Variables are not passed to child shells by default, only if they are exported. Think of each bash session as independent (they largely are). You usually don't want variables defined in one to pollute the environment of another. For those cases where that is necessary, useexport
.