在我的脚本中我做了这样的事情:
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"
。