我想在远程机器上依次执行几个命令,后面的一些命令依赖于前面的命令。在最简单的例子中,我得到了这个:
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 调用已经在一个脚本文件中,因此将所有内容放在一起会很好。