リモート マシンで複数のコマンドを順番に実行したいのですが、後のコマンドの一部は前のコマンドに依存しています。最も単純な例では、次のようになります。
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 呼び出しは既に 1 つのスクリプト ファイル内にあるため、すべてをまとめておくとよいでしょう。