2012-04-23 2 views
1

Я страдаю от действительно странной проблемы на Snow Leopard. В моем терминале, я написал два сценария:OSX экспортированные переменные среды, не унаследованные в дочернем процессе

Первое:

#script-1.sh 
export MY_VAR="This is my variable" 

Второй сценарий:

# script-2.sh, having +x permission 
#!/bin/bash 
echo $MY_VAR 

В терминале, если источник скрипт-1, а затем вызвать скрипт-2 как дочернего процесса, не отображается выход:

$> source script-1.sh 
$> echo $MY_VAR 
This is my variable 
$> . script-2.sh 
This is my variable 
$> ./script-2.sh 

$> 

Любая идея, что здесь не так? Я пробовал тот же сценарий в Windows с помощью Cygwin, и там он работает так, как ожидалось - на OSX кажется, что дочерний процесс вообще не знает $MY_VAR.

ответ

1

Уверены, что вы не запустили script-1.sh в дочернем процессе? Я пробовал ваш пример в 10.6.8 и 10.7.3, и он работает правильно. Команда source script-1.sh такая же, как и . script-1.sh, и она запускает скрипт в том же контексте. Экспортируемые переменные являются переменными окружающей среды, и они всегда копируются в дочерний процесс.

Только сценарий, когда я смог воспроизвести тот же вывод, что и у вас, есть, когда я опустил export из файла script-1.sh.

+0

Я думаю, что 'script-1.sh' не выполняется в дочернем процессе. Но я обнаружил, что следующее работает как обходное решение: '$> sh -c". Script-1.sh && ./script-2.sh "' – lef

+1

Ваше обходное решение в основном аналогично вашему примеру. Помните, что если скрипт-1 не работает, он не выполнит скрипт-2. – Kalicz

Смежные вопросы