跨多个 shell 脚本共享变量

跨多个 shell 脚本共享变量

我试图将多个 shell 脚本汇总到一个大型 shell 脚本中,例如:

#!/bin/sh
bash script1.sh
bash script2.sh
bash script3.sh

所有脚本共享相同的变量varvar2.我想从各个 shell 脚本中删除变量定义,并将其放入大型 shell 脚本中,这样当我更改变量的值时,我只需要做一次。

然而,当我这样做时

#!/bin/sh
var1="1"
var2="2"
bash script1.sh
bash script2.sh
bash script3.sh

引用$var1$var2各个 shell 脚本中都无法识别这些变量。

如果之前有人问过这个问题,我很抱歉,我对一般脚本编写很陌生,不知道要搜索什么。

知道如何循环使用多个变量输入的脚本也很好,例如

var1="1 2 3 4 5"
var2="a b c d e"
for i in $var1;do for j in $var2;do
script1.sh
script2.sh
done;done

答案1

当您在主脚本中运行脚本 1-3 时,它们各自在自己的子 shell 中运行,这就是为什么它们无法识别在其父 shell 中定义的变量的原因。用于export使变量可用于子 shell:

#!/bin/sh
export var1="1"
export var2="2"
bash script1.sh
bash script2.sh
bash script3.sh

另一种选择(与你的第二个问题相关)是将变量传递给脚本位置参数:

#!/bin/sh
var1="1"
var2="2"
bash script1.sh "$var1" "$var2"
bash script2.sh "$var1" "$var2"
bash script3.sh "$var1" "$var2"

在脚本 1-3 中,这些变量将分别可用为$1$2

答案2

我试过这个:

设置环境

var1="1"
var2="2"

脚本文件

#!/bin/sh
bash script1.sh
bash script2.sh
bash script3.sh

脚本*.sh

source setup_env
...

相关内容