Crossover variável em vários scripts bash?

Crossover variável em vários scripts bash?

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=1ele target_script1poderia 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 bashwill neversempreescreva a 1como 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 ano ambiente que a chama.

informação relacionada