2013-03-25 52 views
0

我需要在不同的機器上運行shell腳本。一般的方法調用是這樣的:由build.sh被稱爲如何將環境變量傳遞到不同機器上的bash

ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null [email protected] 'bash' < $GIT_ROOT/chip/sw/scripts/build.sh 

由於其他腳本,我不能向它傳遞參數。據我所知,如果在本地調用bash,它會繼承環境變量。如果在遠程機器上調用它,則不會發生這種情況。

完成任何人都知道一種方式,我可以通過一個環境變量來打擊遠程盒子上?或者,也許有更好的方法在可以使用本地環境變量的遠程系統上調用build.sh

+1

如果你不能編輯實際的'build.sh',你應該可以創建一個包裝腳本,將你的環境變量作爲參數,將它們導出到包裝腳本中,然後從該子shell中調用build.sh 。 – Jite 2013-03-25 18:06:11

+0

或者僅僅是當我想到它時,取決於你如何選擇這樣做,你應該能夠'出口VAR = $ VAR;出口OTHERVAR = $ OTHERVAR ...; build.sh'作爲發送到遠程主機的命令。該環境變量集將僅對該子外殼仍然有效。 – Jite 2013-03-25 18:08:17

回答

1

執行此操作的最佳方法是使用-o SendEnv=YOURVARIABLE,但只有在服務器設置爲從容地允許變量的情況下才有效。如果不是的話,這裏有可能的解決方法:

您可以在命令本身的變量:

ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null [email protected] \ 
    "export CFLAGS='$CFLAGS' LDFLAGS='$LDFLAGS'; bash" < $GIT_ROOT/chip/sw/scripts/build.sh 

這不需要任何特定的SSH的權限,但它確實需要逃避的變量,如果它們可能含有單引號。

如果你有很多的變數和不希望通過他們來排序,你可以用你的腳本一起傾倒整個環境:

{ set; cat "$GIT_ROOT/chip/sw/scripts/build.sh" } | \ 
    ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null [email protected] 'bash' 

這臺遠程系統上的所有局部變量和函數,但可能會導致問題,因爲它不會將其限制爲所需的變量,並覆蓋像PATH和DISPLAY這樣的變量。

相關問題