0

我需要在另一台机器上运行一个 shell 脚本。一般的调用方法是这样的:

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

由于其他脚本被调用,build.sh我无法将参数传递给它。据我所知,如果 abash在本地调用,它会继承环境变量。如果在远程机器上调用它就不会发生这种情况。

有人知道我可以将环境变量传递给远程机器上的 bash 吗?或者,也许有更好的方法build.sh在可以使用本地环境变量的远程系统上调用。

4

1 回答 1

1

最好的方法是使用-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 等变量。

于 2013-03-25T18:28:50.223 回答