我想在远程机器上依次执行几个命令,而后面的一些命令依赖于以前的命令。在一个最简单的例子,我得到这个:是否可以在远程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