多个 Bash 脚本中的变量交叉?

多个 Bash 脚本中的变量交叉?

我有两个同时运行的 bash 脚本,除了两件事之外,它们是相同的。

除了一些其他设置之外,它们还运行以下条目:

ssh ${target_server} "bash -s" < ${target_script} > ${home_dir}/logs/${instance_name}.log 2> ${home_dir}/logs/${instance_name}.err &

两个脚本之间的唯一区别是传递给${target_server}变量的 IP 地址和${instance_name}变量。

扩展后它看起来像这样:

在 local_script1 中:

target_script="target_script1.sh"
ssh 10.1.2.3 "bash -s" < ${target_script} > /home/user/logs/script1.log 2> /home/user/logs/script1.err &

在本地脚本2中:

target_script="target_script2.sh"
ssh 10.1.2.4 "bash -s" < ${target_script} > /home/user/logs/script2.log 2> /home/user/logs/script2.err &    

target_scripts 又是两个独立的 bash 文件,除了与相关服务器上的路径相关的几个关键变量之外,它们是相同的。

尽管它们在单独的服务器上运行,但是否有可能设置的变量存在一些交叉。

例如,如果我进去,myVar=1可以target_script1被接走吗target_script2

或者(我的想法是否正确),因为每个服务器首先打开到“远程”服务器的 SSH 连接,所以变量仅存在于远程服务器上,而不存在于本地服务器上。

答案1

不,一个脚本中设置的变量在另一脚本中不可见。两个脚本都在各自独立的环境中执行。

例子:

bash -c 'a=1; echo $a'

bash -c 'echo $a'

第二次调用bashwill never曾经写入 a1作为输出,无论这两行以什么顺序运行或者它们是否同时执行。

第二行输出的唯一情况是在调用它的环境中1调用了一个环境变量(导出的 shell 变量) 。a

相关内容