我想在遠程機器上依次執行幾個命令,而後面的一些命令依賴於以前的命令。在一個最簡單的例子,我得到這個:是否可以在遠程ssh命令中使用變量?
ssh my_server "echo this is my_server; abc=2;"
this is my_server
abc=2: Command not found.
ssh my_server "echo this is my_server; abc=2; echo abc is $abc"
abc: undefined variable
對於位的背景資料,是我真正想要做的是拼湊的路徑和啓動的Java應用程序:
ssh my_server 'nohup sh -c "((echo this is my_server; jabref_exe=`which jabref`; jabref_dir=`dirname $jabref_exe`; java -jar $jabref_dir/../jabref.jar` $1 &/dev/null) &)"' &
jabref_dir: Undefined variable.
這樣,每當jabref被更新到服務器上的新版本時,我就不必手動更新jar文件的路徑。 jabref可執行文件不帶參數,但是用java -jar
啓動它,這就是爲什麼我必須稍微調整一下路徑。
目前,我有命令的列表中一個單獨的腳本文件,並調用
ssh my_server 'nohup sh -c "((my_script.sh &/dev/null) &)"' &
其工作原理,但由於SSH調用已裏面一個腳本文件,它會是不錯的一切融合在一起。
謝謝,這讓我走上正軌。通過引號或'\ $'防止擴展是關鍵。事實證明,服務器上的默認shell是tcsh,這是'abc = 2'不起作用的另一個原因。 – craq 2013-03-11 12:58:56
很棒的回答。我使用Jenkins和SSH Agent插件,它像一個魅力。 – 2017-06-21 16:21:47