将一个shell脚本variables传递给另一个shell脚本

我想从另一个脚本访问一个脚本variables例如,

script1.sh:

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

script2.sh:

 . script1.sh echo $a 

这里涉及到的问题是它能够从脚本2中的脚本1访问variables'a',但是它执行所有script1.sh写的令人讨厌的命令 。 我只想访问script1中的导出variables,并且不想在script1中调用脚本时运行命令。

请帮助!

谢谢,
KARTHIK

分配一个变量是一个命令。 除非你准备在bash中编写一个bash解析器,否则你不能完成的任务。

如果你的变量赋值只是以上面指出的确切形式出现,那就是

 export a=10 

那么你可以使用grep提取这些赋值并eval结果。 你的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` 

这些都是潜在的问题。

你正在做什么(只从另一个脚本获取变量,而不执行命令)是不可能的。

这是一个解决方法:

将变量声明和初始化提取到第三个文件,然后由它们来源。

共瓦尔:

 export a=10 export b=20 

script1.sh:

 . common-vars echo "testing" exit 

script2.sh:

 . common-vars echo $a 

我同意伊格纳西奥·巴斯克斯 – 艾布拉姆斯。

分配一个变量是一个命令

你可以做的事情不多。

一个可能的解决办法是把变量定义分离成第三个脚本,这个脚本将被用作配置脚本。 因此, 脚本 1和脚本2都会使用那个定义的变量。

script2.sh:

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

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

我同意“伊格纳西奥·巴斯克斯 – 艾布拉姆斯”这是一个很好的回答你的问题。

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

让我们说你的script1.sh是:

 a=10 b=20 

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

例:

 .[space]script1 

现在,如果您将在脚本中访问变量a,那么您将无法访问变量。

让我们说你的script2.sh是:

 echo $a 

跑:

 .[space]script2