Eu tenho dois scripts bash em execução simultaneamente, que são idênticos, exceto por duas coisas.
Além de algumas outras peças de configuração, eles executam a seguinte entrada:
ssh ${target_server} "bash -s" < ${target_script} > ${home_dir}/logs/${instance_name}.log 2> ${home_dir}/logs/${instance_name}.err &
As únicas diferenças entre os dois scripts são o endereço IP passado para a ${target_server}
variável e a ${instance_name}
variável.
Então expandido ficaria mais ou menos assim:
Em 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 &
Em local_script2:
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 &
Os target_scripts são novamente dois arquivos bash separados que são idênticos, exceto por algumas variáveis-chave relacionadas aos caminhos no servidor relevante.
É possível que, embora estejam rodando em servidores separados, haja algum cruzamento das variáveis que estão sendo definidas.
por exemplo, se eu entrar, myVar=1
ele target_script1
poderia ser atendido por target_script2
?
Ou (estou certo em pensar) que porque cada um está abrindo uma conexão SSH com o servidor 'remoto' primeiro, as variáveis SOMENTE existem nos servidores remotos, e não no local.
Responder1
Não, as variáveis definidas em um script não são visíveis em outro script. Ambos os scripts estão sendo executados em seus próprios ambientes separados.
Exemplo:
bash -c 'a=1; echo $a'
bash -c 'echo $a'
A segunda invocação de bash
will neversempreescreva a 1
como saída, independentemente da ordem em que as duas linhas são executadas ou se são executadas simultaneamente.
O único caso em que a segunda linha seria exibida 1
é se houver uma variável de ambiente (variável de shell exportada) chamada a
no ambiente que a chama.