Це тому, що HADOOP_HOMEзмінна не експортується:
$ 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
Коли ви запускаєте скрипт оболонки, цей сценарій буде запускатися у власному екземплярі bash (саме так і #!/bin/bashробиться), який є дочірньою оболонкою поточного. Змінні не передаються в дочірні оболонки за замовчуванням, лише якщо вони експортуються. Подумайте про кожен баш-сеанс як незалежний (вони багато в чому є). Зазвичай ви не хочете, щоб змінні, визначені в одному, забруднювали середовище іншого. Для тих випадків, коли це необхідно, використовуйте export.
.bashrc? Я здогадуюсь, що ви неexportін:,export HADOOP_HOME=/home/me/dist/hadoopколи ви запускаєте/tmpsample.sh` (який породить новеbashз новим середовищем) HADOOP_HOME не в новому середовищі.