我有两个同时运行的 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'
第二次调用bash
will never曾经写入 a1
作为输出,无论这两行以什么顺序运行或者它们是否同时执行。
第二行输出的唯一情况是在调用它的环境中1
调用了一个环境变量(导出的 shell 变量) 。a