2010-07-23 194 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環境變量將由
    遠程外殼