在我的腳本中我做了這樣的事情:
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"
.