脚本中的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

但是,当从 echo 输出复制命令并直接从终端运行时,它就像魔法一样有效。有什么想法吗?

答案1

exec将 shell 替换为程序,并使用提供的参数调用它。shell 看到 2 个标记:“exec”和“some/path/script.sh arg1 arg2; some/path/script2.sh arg1 arg2;”。第二个参数被解释为要执行的程序的路径,包括所有空格和分号。只有 shell 知道在空格处拆分参数并在分号处分隔命令。因此,您应该将 替换为exec对 shell 的调用,例如sh -c "$ssh_command"

答案2

诺胡普可能对你有用。

尝试从下面的链接整合类似的东西。

ssh -n -f 用户@主机”噴陣'cd /whereever; nohup ./whatever > /dev/null 2>&1 &'"

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

相关内容