2016-02-25 73 views
0

我在这里错过了一些东西。 我们有一个脚本来设置一些环境变量:在另一个脚本内采购一个脚本

firstscript.sh:

#!/bin/sh 
export JAVA_HOME=/novus/jdk/jdk1.7.0_67 
echo "exported" 

这些变量对其他脚本重要:

#!/bin/sh 
echo $JAVA_HOME 

我一直在做这工作来自外壳,找到第一个脚本并调用第二个脚本。我试图将这两个脚本合并为一个。 我认为第二个脚本应该是这样的:

#!/bin/sh 
eval firstscript.sh 
echo $JAVA_HOME 

我和EVAL试过这个,我已经试过这与来源,我已经试过这要么不EVAL或源,无论我做什么,在第一个脚本中导出的变量在秒记中找不到。

我也试过没有firstscript输出,只是在shell中设置变量。这也不起作用。像这样:

#!/bin/sh 
JAVA_HOME=/novus/jdk/jdk1.7.0_67 
echo "exported" 

回答

0

它应与exportsource合作。下面是情况下运行测试,你可能已经错过了一些东西:

$ echo 'export var1=defined' > sourced_script.sh 
$ echo 'source ./sourced_script.sh; echo $var1' > main_script.sh 
$ chmod +x main_script.sh 
$ ./main_script.sh 
defined 

至少有两个要点:

  • 的变量必须export版,否则他们不会可用外定义它们的上下文
  • source必须在使用变量的同一个shell中执行。

对于第二点,如果你是例如执行以下命令:

(source first_script.sh; echo $JAVA_HOME) ; echo $JAVA_HOME 

只有第一回波将打印在first_script.sh定义的变量,因为出口只会影响子shell它运行英寸

+0

多数民众赞成在我需要什么,谢谢。 我其实是在做错事。感谢您的正确例子。 –