2010-07-23 200 views
60

我希望能够使用SSH从我的计算机上运行一个命令,并通过环境变量$BUILD_NUMBER传递变量

这里就是我想:

ssh [email protected] '~/tools/myScript.pl $BUILD_NUMBER' 

$BUILD_NUMBER是在进行ssh调用的机器上设置,并且由于该变量在远程主机上不存在,所以它不会被拾取。

如何通过$BUILD_NUMBER的值?

+1

无关哈德森,除去标签一起使用。 (Hudson只是创建变量) – 2010-07-23 14:02:34

回答

116

如果使用

ssh [email protected] '~/tools/run_pvt.pl $BUILD_NUMBER' 

你的shell

ssh [email protected] "~/tools/run_pvt.pl $BUILD_NUMBER" 

而不是发送命令字符串到远程主机之前将插值$BUILD_NUMBER

+1

如果有人必须使用单引号,以便包含在引号中的命令不在本地评估,那么他们应该使用“'$ VARIABLE'”。例如:ssh [email protected]'〜/ tools/run_pvt.pl''$ BUILD_NUMBER'''' – 2016-10-10 02:36:19

+1

不知道bash对单引号和双引号的反应是不同的。谢谢! – silgon 2017-08-29 07:49:53

22

不评估单引号中的变量。使用双引号:

ssh [email protected] "~/tools/run_pvt.pl $BUILD_NUMBER" 

shell将用双引号扩展变量,但不能用单引号括起来。在传递给ssh命令之前,这将变成您想要的字符串。

-1

逃离变量,以便访问变量SSH会话之外: SSH [email protected]“〜/工具/ myScript.pl \ $ BUILD_NUMBER”

+1

这并没有达到问题所要求的。 – 2017-08-29 07:39:11

+1

从shell的角度来看,''FOO''等同于'“\ $ FOO”'。问题是“如何通过SSH传递shell变量?”。正如@PatrickTrentin所述,这不是一个正确的答案,因为'BUILD_NUMBER'环境变量不是远程设置的。 – 2017-08-29 11:16:25

0

正如前面回答,你不需要在远程主机上设置环境变量。相反,您可以简单地在本地主机上进行元扩展,然后将值传递给远程主机。

ssh [email protected] '~/tools/run_pvt.pl $BUILD_NUMBER' 

如果你真的想设置远程主机上的环境变量,并使用它,你可以使用env程序

ssh [email protected] "env BUILD_NUMBER=$BUILD_NUMBER ~/tools/run_pvt.pl \$BUILD_NUMBER" 

在这种情况下,这是一个有点矫枉过正的方法及注意事项

  • env BUILD_NUMBER=$BUILD_NUMBER做本地 主机
  • 再上元扩张微尘BUILD_NUMBER环境变量将由
    远程外壳