在另一个脚本中寻找一个脚本

时间:2016-02-25 17:07:30

标签: bash shell sh

我在这里遗漏了一些东西。 我们有一个脚本来设置几个环境变量:

firstscript.sh:

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

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

#!/bin/sh
echo $JAVA_HOME

我正在做的工作是从shell获取第一个脚本并调用第二个脚本。我试图将两个脚本合二为一。 我认为第二个脚本应该是这样的:

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

我已经尝试使用eval,我已经尝试过这个来源,我已经尝试了这个没有eval或source,无论我做什么,在第一个脚本中导出的变量都不是&# 39; t在秒表中找到。

我还尝试过没有firstscript导出,只是在shell中设置变量。那也没有用。像这样:

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

1 个答案:

答案 0 :(得分: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

只有第一个echo会打印first_script.sh中定义的变量,因为导出只会影响它运行的子shell。