Переменные среды не доступны в сценарии удара

Я столкнулся со странной проблемой. Я поместил некоторые огибающие переменные в .bashrc и это работает, как это должно:

echo $HADOOP_HOME
/home/me/dist/hadoop

Но огибающая переменная не доступна при выполнении сценариев удара. Предположим, что я создаю /tmp/sample.sh с ниже содержания:

#! /bin/bash
echo $HADOOP_HOME

То, когда я работаю выше сценария, повторяет пустую строку:

/tmp/sample.sh
   ‌
20
задан 10 December 2016 в 06:48

1 ответ

Поэтому 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.

28
ответ дан 23 November 2019 в 01:51

Другие вопросы по тегам:

Похожие вопросы: