Я столкнулся со странной проблемой. Я поместил некоторые переменные env .bashrc
и он работает как следует:
echo $HADOOP_HOME
/home/me/dist/hadoop
Но переменная env недоступна при выполнении сценариев bash. Предположим, я создаю /tmp/sample.sh
с содержанием ниже:
#! /bin/bash
echo $HADOOP_HOME
Когда я запускаю вышеуказанный скрипт, отображается пустая строка:
/tmp/sample.sh
command-line
bash
scripts
environment-variables
Mehraban
источник
источник
.bashrc
? Я предполагаю, что вы не используетеexport
:,export HADOOP_HOME=/home/me/dist/hadoop
когда вы запускаете/tmp
sample.sh` (который порождает новоеbash
в новой среде), HADOOP_HOME не в новой среде.Ответы:
Это потому, что
HADOOP_HOME
переменная не экспортируется:Когда вы запускаете сценарий оболочки, этот сценарий будет запускаться в своем собственном экземпляре bash (это то, что
#!/bin/bash
делает), который является дочерней оболочкой текущего. Переменные по умолчанию не передаются дочерним оболочкам, только если они экспортируются. Думайте о каждом сеансе bash как о независимом (в основном они есть). Обычно вы не хотите, чтобы переменные, определенные в одном, загрязняли окружение другого. Для тех случаев, когда это необходимо, используйтеexport
.источник