另外在shell期望命令

时间:2015-05-25 10:25:40

标签: php shell expect

我已经通过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'");

1 个答案:

答案 0 :(得分:2)

利用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