多個 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}變數的 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'

第二次召喚bashwill never曾經寫入 a1作為輸出,無論這兩行以什麼順序運行或它們是否同時執行。

第二行輸出的唯一情況是在呼叫它的環境中1呼叫了一個環境變數(導出的 shell 變數) 。a

相關內容