Я пытаюсь получить сведения о конфигурации от коммутатора через ожидаемый сценарий.
У меня ниже работает нормально, как я ожидал, когда я звоню через оболочку вручную.
Но когда то же самое вызывается через, php (чтобы создать веб-интерфейс для вызова этого) каким-то образом wait_out (буфер) не заполняет все строки, и мое совпадение завершается неудачей.
Я пытаюсь соответствовать установленный бит конфигурации или нет.
Опять же, код работает при вызове вручную, просто через php это как-то не в состоянии заполнить wait_out (buffer) :(: (
Рабочий код.
#!/usr/bin/expect
set ip ROUTER_IP
set uname USER_NAME
set psd PASSWORD
set log_file -a "/tmp/script.log"
spawn /usr/bin/ssh $uname@$ip
expect {
"ord:" {
send "$psd\r"
expect {
"> " {
send "\r"
set cmd "show configuration | display set | match class | match rancid"
set values $expect_out(buffer)
send_log "\nbefore trim n match -$values-\n"
set values [string trim $values]
send_log "\nbefore match -$values-\n"
set found [regexp {match rancid\s+(.*)\s+\r\n\{.*} $values match px]
if { $found == 1 && $px != "" } {
puts "Rancid Exists... !!!"
send "exit\r"
exit 1
} else {
puts "Coundnt find Rancid ... !!!"
send "exit\r"
exit 2
}
}
"denied: " {
puts "ERROR: Access Denied"
exit 2
}
}
}
}
Я звоню через php вот так
$res=shell_exec("/usr/bin/expect $scriptPath ");
Я мог видеть, что ожидаемый_каталог (буфер), для которого установлено значение $ values, заполняется половиной команд, выводимых из файла журнала.
Успешное ожидание (буфер),
before trim match -show configuration | display set | match class | match rancid ^M
set system login user rancid class remote-backup^M
^M
{master:1}^M
USER_NAME@SWITCH> -
before match -show configuration | display set | match class | match rancid ^M
set system login user rancid class remote-backup^M
^M
{master:1}^M
USER_NAME@SWITCH>-
при вызове через php Ожидаемый_буток (буфер) выглядит следующим образом:
before trim match -show configuration | display set | m^MUSER_NAME@SWITCH> -
before match -show configuration | display set | m^MUSER_NAME@SWITCH>-
Каким-то образом, когда ожидается сценарий, вызываемый через php, в буфер не выводятся все команды, и сопоставление завершается неудачно.
Может кто-нибудь подсказать мне, в чем может быть ошибка. Спасибо.