Остальное в shell ожидают команды

Я успешно выполнил следующую команду через 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'");

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 команда.

Примечание. Как отметил г-н Гленн, если вам действительно нужно использовать целую оболочку, используйте interact, Так как вы выполняете это из phpлучше продолжать expect eof только.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]