Я хочу получить переменную из другого сценария, как продемонстрировано в этом вопросе на Переполнении стека:
Как сослаться на файл для переменных в сценарии удара
Однако ответ использует source
команда, которая только доступна в bash
. Я хочу сделать это портативным способом.
Я также попробовал
a.sh
export VAR="foo"
echo "executing a"
b.sh
#!/bin/sh
./a.sh
echo $VAR
Но конечно который не работает также. Как сделать это?
Прежде всего, имейте в виду, что var
и VAR
являются разными переменными.
Чтобы ответить на ваш вопрос, команда .
не относится к bash:
# a.sh
num=42
# b.sh
. ./a.sh
echo $num
Переменные в «a» не нужно экспортировать.
http://www.gnu.org/software/bash/manual/bashref.html#Bourne-Shell-Builtins
Переменные среды наследуются только от родителя к потомку, а не наоборот. В вашем примере b.sh вызывает a.sh, поэтому a запускается как дочерний элемент для b. Когда a.sh экспортирует var, он не будет виден b.sh. Измените логику так, чтобы родительский процесс экспортировал переменную, например
a.sh:
echo In a.sh...
VAR="test"
export VAR
./b.sh
b.sh:
echo In b.sh...
echo $VAR