Це тому, що 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
коли ви запускаєте/tmp
sample.sh` (який породить новеbash
з новим середовищем) HADOOP_HOME не в новому середовищі.