Как импортировать переменную из другого сценария?

Я хочу получить переменную из другого сценария, как продемонстрировано в этом вопросе на Переполнении стека:

Как сослаться на файл для переменных в сценарии удара

Однако ответ использует source команда, которая только доступна в bash. Я хочу сделать это портативным способом.

Я также попробовал

a.sh

export VAR="foo"
echo "executing a"

b.sh

#!/bin/sh
./a.sh
echo $VAR

Но конечно который не работает также. Как сделать это?

7
задан 23 May 2017 в 15:39

2 ответа

Прежде всего, имейте в виду, что 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

0
ответ дан 23 May 2017 в 15:39

Переменные среды наследуются только от родителя к потомку, а не наоборот. В вашем примере 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
0
ответ дан 23 May 2017 в 15:39

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

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