Я успешно выполнил следующую команду через 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 ответ
Используйте 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
.
Примечание: как указал г-н Гленн, если вам действительно нужно работать с оболочкой, используйте interact
. Поскольку вы выполняете это из php
, лучше использовать только expect eof
.
Похожие вопросы
Новые вопросы
php
PHP - это широко используемый высокоуровневый, динамический, объектно-ориентированный и интерпретируемый язык сценариев, в первую очередь предназначенный для серверной веб-разработки. Используется для вопросов о языке PHP.
expect eof
вместоinteract