我想从另一个脚本访问一个脚本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