shell 中的其他 expect 命令

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