スクリプトでの SSH リモート コマンド実行

スクリプトでの SSH リモート コマンド実行

私のスクリプトでは、次のようなことを行います。

command="some/path/script.sh arg1 arg2; some/path/script2.sh arg1 arg2;"
ssh_command="ssh root@$ip '$command'"

echo $ssh_command
exec $ssh_command

echo の出力は次のようになります:

ssh [email protected] 'some/path/script.sh arg1 arg2; some/path/script2.sh arg1 arg2;'

「exec」を実行すると、次のような出力が得られます。

bash: some/path/script.sh arg1 arg2; some/path/script2.sh arg1 arg2;: No such file or directory

ただし、エコー出力からコマンドをコピーし、ターミナルから直接実行すると、うまく動作します。理由について何かご存知ですか?

答え1

execシェルをプログラムに置き換え、指定された引数で呼び出します。シェルは 2 つのトークンを認識します: "exec" と "some/path/script.sh arg1 arg2; some/path/script2.sh arg1 arg2;"。2 番目の引数は、すべてのスペースとセミコロンを含めて、実行するプログラムへのパスとして解釈されます。シェルだけが、引数を空白で分割し、コマンドをセミコロンで区切ることを知っています。したがって、 をexecのようなシェルの呼び出しに置き換える必要がありますsh -c "$ssh_command"

答え2

ノフップあなたにとって役に立つかもしれません。

以下のリンクから、次のようなものを統合してみてください。

ssh -n -f ユーザ@ホスト "sh -c'cd /whereever; nohup ./whatever > /dev/null 2>&1 &'"

https://stackoverflow.com/q/29142/1666510

関連情報