我需要在另一台机器上运行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
。
答案 0 :(得分: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等变量。