如何在不同的机器上向bash传递环境变量

如何在不同的机器上向bash传递环境变量,bash,Bash,我需要在另一台机器上运行shell脚本。一般调用方法如下所示: ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null bot-bono@other-dt 'bash' < $GIT_ROOT/chip/sw/scripts/build.sh ssh-o StrictHostKeyChecking=no-o UserKnownHostsFile=/dev/null bot-bono@other-dt'bash'

我需要在另一台机器上运行shell脚本。一般调用方法如下所示:

ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null bot-bono@other-dt 'bash' < $GIT_ROOT/chip/sw/scripts/build.sh
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

这会在远程系统上设置所有本地变量和函数,但可能会导致问题,因为它不会将其限制为所需的变量,并覆盖PATH和DISPLAY等变量

如果您不能编辑实际的
build.sh
,您应该能够生成一个包装器脚本,该脚本将把您的环境变量作为参数,在包装器脚本中导出它们,然后从该子shell调用build.sh。或者只是在我想的时候,根据您选择的方式,您应该能够导出VAR=$VAR;导出OTHERVAR=$OTHERVAR;build.sh作为发送到远程主机的命令。设置的环境变量仅对该子shell有效。
{ set; cat "$GIT_ROOT/chip/sw/scripts/build.sh" } | \
    ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null bot-bono@other-dt 'bash'