Переменная кроссовер в нескольких скриптах bash?

Переменная кроссовер в нескольких скриптах bash?

У меня одновременно запущены два bash-скрипта, которые идентичны, за исключением двух вещей.

Помимо нескольких других настроек, они запускают следующую запись:

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

Единственные различия между двумя скриптами — это IP-адрес, переданный в ${target_server}переменную, и ${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 &

В 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 &    

target_scripts — это снова два отдельных bash-файла, которые идентичны, за исключением нескольких ключевых переменных, относящихся к путям на соответствующем сервере.

Возможно ли, что, хотя они работают на разных серверах, происходит некое пересечение устанавливаемых переменных?

например, если я приеду, myVar=1сможет target_script1ли его забрать target_script2?

Или (я прав) поскольку каждый из них сначала открывает SSH-соединение с «удалённым» сервером, переменные существуют ТОЛЬКО на удалённых серверах, а не на локальном.

решение1

Нет, переменные, заданные в одном скрипте, не видны в другом скрипте. Оба скрипта выполняются в своих собственных отдельных средах.

Пример:

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

bash -c 'echo $a'

Второе обращение к слову « bashникогда»всегдазапишите a 1в качестве выходных данных, независимо от того, в каком порядке выполняются две строки или выполняются ли они одновременно.

Единственный случай, когда вторая строка будет выводить данные, — это если в вызывающей ее среде 1есть переменная среды (экспортированная переменная оболочки) .a

Связанный контент