я написал следующий ожидать сценарий:Использования вложенного метода икры в сценарии ожидать
/usr/bin/expect<<EOF
set SERVER_HOSTNAME "$env(SERVER_HOSTNAME)"
set USERNAME "$env(USERNAME)"
set PASSWORD "$env(PASSWORD)"
set timeout -1
spawn ssh "[email protected]$SERVER_HOSTNAME"
expect {
"Host key verification failed." { spawn ssh-keygen -R "$SERVER_HOSTNAME"; expect "known_hosts.old"; send_user "Updated host key details."; exp_continue}
"continue connecting (yes/no)" { send "yes\r"; expect "Permanently added"; exp_continue}
"assword:" { send_user "Keygen details are correctly mapped for this server\n"}
}
EOF
Здесь я хочу, что если ключ хоста сервера не может быть проверен в то время как spawing процесс «SSH», то вложенным Процесс spawn «ssh-keygen -R» должен удалить старый ключ. Затем процесс «ssh» должен попытаться подключиться снова, чтобы добавить новый ключ, соответствующий этому серверу.
Но вот, после исполнения:
send_user "Updated host key details."
метод, ожидать процесс выхода из этого сценария.
Я знаю, что альтернативой может быть, чтобы разделить это ожидать называют в два этапа, а именно:
/usr/bin/expect<<EOF
set SERVER_HOSTNAME "$env(SERVER_HOSTNAME)"
set USERNAME "$env(USERNAME)"
set PASSWORD "$env(PASSWORD)"
set timeout -1
spawn ssh "[email protected]$SERVER_HOSTNAME"
expect {
"Host key verification failed." { spawn ssh-keygen -R "$SERVER_HOSTNAME"; expect "known_hosts.old"; send_user "Updated host key details."; exp_continue}
"continue connecting (yes/no)" { send "yes\r"; expect "Permanently added"; exp_continue}
"assword:" { send_user "Keygen details are correctly mapped for this server\n"}
}
spawn ssh "[email protected]$SERVER_HOSTNAME"
expect {
"continue connecting (yes/no)" { send "yes\r"; expect "Permanently added"; exp_continue}
"assword:" { send_user "Keygen details are correctly mapped for this server\n"}
}
EOF
Но у нас есть способ, чтобы выполнить это ожидать вызова на одном дыхании. В двух словах, я хочу знать, можем ли мы сделать вложение процесса появления?
Как я могу использовать exp_continue после процесса 2. Например, если я хочу, чтобы написать сценарий следующим образом: \t икру SSH "$ USERNAME @ $ SERVER_HOSTNAME" \t набор идентификаторов (1) $ spawn_id \t ожидать { \t \t \t "Host ключ проверки не удалось." {spawn ssh-keygen -R "$ SERVER_HOSTNAME"; ожидать «known_hosts.old»; send_user «Обновлены сведения о главном узле»; exp_continue -i $ ids (1)} \t \t \t «продолжить соединение (да/нет)» {spawn $ ScriptsDir/TestProcess; send -i $ ids (1) «yes \ r»; ожидать -i $ ids (1) «Постоянно добавлено»; exp_continue -i $ иды (1)} \t \t \t "assword:" {send_user "детали Keygen правильно отображаются для этого сервера \ п"} \t \t \t} \t –
EOF В вышеописанном случае я получаю следующее сообщение об ошибке : «использование: exp_continue [-continue_timer] при выполнении "exp_continue -i (1)" Я инициализируется массив идентификаторов, как: массив набор идентификаторов {1} "" –
Это связано с тем, как вы смешение ожидает кода в сценарий оболочки. Вы заметили, как '$ ids (1)' превратился в '(1)'? That ' s оболочка, заменяющая переменные * before * expect, начинается.Измените heredoc на использование одинарных кавычек, чтобы оболочка не касалась переменных ожидания: '/ usr/bin/expect << 'EOF'' –