Как сделать больше с ожидаемым сценарием, чем просто войти в систему

У меня есть сценарий ожидания, который входит в мой Beaglebone:

    #!/usr/bin/expect -f
    spawn ssh debian@192.168.7.2
    expect "debian@192.168.7.2's password:"
    send "temppwd\r"
    interact &&
    mkdir emma &&
    cd emma

Это работает, и он входит в учетную запись Debian. Тем не менее, он останавливается после interact две другие команды не выполняются. Что я должен сделать, чтобы сделать это?

РЕДАКТИРОВАТЬ

Хорошо, так спасибо andy256 Я понял, что interact здесь не так, однако, я получаю

неверное имя команды "mkdir" при выполнении

Как я могу объединить ожидаемый сценарий с обычным сценарием оболочки?

Заранее спасибо!

1 ответ

Решение

Основное направление ожидаемого программирования send а также expect пары: вы отправляете некоторый текст в порожденный процесс и ожидаете ответа. В этом случае вы отправляете команду mkdir и ожидаете увидеть ваше приглашение, чтобы узнать, что команда выполнена. Подсказки лучше всего сопоставлять как регулярные выражения, чтобы соответствовать концу. Поскольку подсказки можно настраивать, вы можете изменить выражение подсказки: оно соответствует буквальному знаку доллара и пробелу в конце строки.

#!/usr/bin/expect -f
spawn ssh debian@192.168.7.2
expect "debian@192.168.7.2's password:"
send "temppwd\r"
set prompt_re {\$ $}
expect -re $prompt_re
send "mkdir -p emma && cd emma\r"
expect -re $prompt_re
interact
Другие вопросы по тегам