Я столкнулся со странной проблемой. Я поместил некоторые огибающие переменные в .bashrc
и это работает, как это должно:
echo $HADOOP_HOME
/home/me/dist/hadoop
Но огибающая переменная не доступна при выполнении сценариев удара. Предположим, что я создаю /tmp/sample.sh
с ниже содержания:
#! /bin/bash
echo $HADOOP_HOME
То, когда я работаю выше сценария, повторяет пустую строку:
/tmp/sample.sh
Поэтому 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
при выполнении сценария оболочки тот сценарий будет работать в его собственном экземпляре удара (это - то, что эти #!/bin/bash
делает), который является дочерней оболочкой текущей. Переменные не передаются дочерним оболочкам по умолчанию, только если они экспортируются. Думайте о каждой сессии удара как независимой (они в основном). Вы обычно не хотите, чтобы переменные, определенные в одной, загрязнили среду другого. Для тех случаев, где это необходимо, используйте export
.