여러 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}변수와 ${instance_name}변수에 전달된 IP 주소입니다.

확장하면 다음과 같이 보일 것입니다.

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'

bashwill never 의 두 번째 호출항상1두 줄이 어떤 순서로 실행되는지 또는 동시에 실행되는지에 관계없이 출력으로 작성합니다 .

두 번째 줄이 출력되는 유일한 경우 는 이를 호출하는 환경에서 1호출되는 환경 변수(내보낸 쉘 변수)가 있는 경우입니다 .a

관련 정보