shell中的Else命令


Else in shell expect command

我已经成功地通过php执行了以下命令,但它只能直接工作。如果主机已经添加或任何期望不匹配,则意味着它失败。谁能建议一种方法来处理这个,即使期望是不匹配的,它应该进入下一步?

shell_exec("expect -c 'spawn sudo su - root -c '"ssh-copy-id -i " . $host . "'"
            expect '"yes/no'"
            send '"yes'r'"
            expect '"password:'"
            send '"yyyy'r'"
            interact'");

利用exp_continue来解决这个问题。

"expect -c 'spawn sudo su - root -c '"ssh-copy-id -i " . $host . "'"
expect {
    '"yes/no'" {send '"yes'r'";exp_continue}
    '"password:'" {send '"yyyy'r'"}
}
interact'"

如果Expect看到yes/no,将发送yes,然后再继续;如果它看到password,将发送密码。之后,它将继续执行interact命令。

注意:正如Mr.Glenn指出的,如果你确实需要与shell保持一致,请使用interact。由于要从php执行此操作,因此最好只使用expect eof