2012-04-23 57 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 

$> 

任何想法这里有什么问题?我使用Cygwin在Windows上尝试了相同的场景,并且它在预期的情况下工作 - 在OSX上,似乎子进程完全不知道$MY_VAR

回答

1

你确定你没有在子进程中运行script-1.sh?我在10.6.8和10.7.3中试过你的例子,它正常工作。命令source script-1.sh. script-1.sh相同,它在相同的上下文中运行脚本。导出的变量是环境变量,它们总是被复制到子进程。

只有当我能够重现相同输出的情况下,当我从script-1.sh文件中省略export时才是如此。

+0

我认为'script-1.sh'没有在子进程中执行。但我发现,下面的解决方法是:'$> sh -c“。script-1.sh && ./script-2.sh”' – lef 2012-04-23 12:37:03

+1

您的解决方法与您的示例基本相同。请注意脚本1是否失败,它不会执行脚本2。 – Kalicz 2012-04-23 13:52:03