将一个shell脚本变量传递给另一个shell脚本

时间:2011-07-21 01:39:23

标签: linux shell sh external

我试图从另一个脚本访问一个脚本变量,例如,

script1.sh:

export a=10
export b=20
echo "testing"
exit

script2.sh:

. script1.sh
echo $a

此处涉及的问题是它能够从 script2 中的 script1 访问变量'a',但是它正在执行所有命令 script1.sh 这很烦人。我只想访问 script1 中的导出变量,而不想在 script2 中调用 script2 中的命令。

>

请帮忙!

谢谢,
KARTHIK

7 个答案:

答案 0 :(得分:2)

分配变量是一个命令。除非你准备用bash编写一个bash解析器,否则你无法做到。

答案 1 :(得分:2)

您要做的事情(仅从其他脚本获取变量,而不执行命令)是不可能的。

这是一种解决方法:

将变量声明和初始化提取到第三个文件,然后由两个文件提供。

共瓦尔:

export a=10
export b=20

script1.sh:

. common-vars
echo "testing"
exit

script2.sh:

. common-vars
echo $a

答案 2 :(得分:1)

如果你的变量作业只是完全形式 ,那就是

export a=10

然后您可以使用grepeval结果提取这些作业。那么你的script2.sh就是

eval `grep "^export " script1.sh`
echo $a

但这样做非常脆弱,可以在很多方面打破。将变量赋值放在由其他人提供的第三个脚本中的建议更安全。

如果在条件句中有变量设置,或者导出的变量依赖于遗漏的其他非导出变量,或者单独设置和导出变量,则可能会中断;如果你碰巧在你的出口中使用命令替换,那么它们仍会因其可能的副作用而运行。

if [ $doexport = 1 ]; then
  export a=1
fi

a=2
export a

b=2
export a=$b

export a=`ls |wc -l`

这些都可能存在问题。

答案 3 :(得分:0)

我同意Ignacio Vazquez-Abrams的观点。

  

分配变量是一个命令

你无能为力。

一个可能的解决方案是将变量定义分离到第三个脚本,该脚本将用作配置脚本。所以 script1 script2 都会source那个,使用那里定义的变量。

答案 4 :(得分:0)

script2.sh:

eval "$(grep export script1.sh)"
echo $a

答案 5 :(得分:0)

我同意“Ignacio Vazquez-Abrams”这是对你的问题的一个很好的答案。

但我有另一个解决方案,你没有导出你的变量。概念基于:使用Login shell运行脚本而不是新shell。

让我们说你的script1.sh是:

a=10 

b=20

现在在您的登录shell中运行您的脚本:

示例:

.[space]script1

现在,如果您将在脚本中访问变量a,那么您将可以访问它。

示例

让我们说你的script2.sh是:

echo $a

运行:

.[space]script2

答案 6 :(得分:0)

您可以通过将变量作为参数传递,将变量从一个脚本传递到另一个脚本。 这当然意味着脚本B将被脚本A调用。脚本B将需要检查传递的参数是否为空。