Как сделать больше с ожидаемым сценарием, чем просто войти в систему
У меня есть сценарий ожидания, который входит в мой 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