[英]How to pass environment variables to bash on different machine
我需要在另一台機器上運行Shell腳本。 通用的調用方法如下:
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null bot-bono@other-dt 'bash' < $GIT_ROOT/chip/sw/scripts/build.sh
由於build.sh
調用了其他腳本,因此無法將參數傳遞給它。 據我所知,如果在本地調用bash
,它將繼承環境變量。 如果在遠程計算機上調用它,則不會發生。
有人知道我可以將環境變量傳遞給遠程盒子上的bash嗎? 或者,也許有更好的方法可以在使用本地環境變量的遠程系統上調用build.sh
。
最好的方法是使用-o SendEnv=YOURVARIABLE
,但這僅在服務器設置為寬松地允許變量的情況下才有效。 如果不是,這里是可能的解決方法:
您可以在命令本身中設置變量:
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null bot-bono@other-dt \
"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 bot-bono@other-dt 'bash'
這將在遠程系統上設置所有本地變量和函數,但可能會導致問題,因為它不會將其限制為所需的變量,並且會覆蓋PATH和DISPLAY等變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.