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
。
我已经通过 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
。