リモートマシンで複数のコマンドを順番に実行したいのですが、後のコマンドのいくつかは以前のものに依存しています。最も単純な例では、私はこの取得:背景情報のビットのためにリモート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のコールは1つのスクリプトファイル内に既にあるので、一緒にすべてを持っていいだろうどの
ssh my_server 'nohup sh -c "((my_script.sh &/dev/null) &)"' &
を呼び出す瞬間
。この例では
ありがとう、それは正しい軌道に乗せてくれました。逆のコンマや '\ $ 'による展開を防ぐことが重要でした。サーバ上のデフォルトのシェルがtcshだったことが判明し、それは 'abc = 2'がうまくいかなかったもう一つの理由でした。 – craq
偉大な答え。私はSSH AgentプラグインでJenkinsを使用しています。それは魅力的です。 –