Я написал небольшой сценарий Expect для входа в устройство Cisco;После входа в систему я хочу многократно выполнить команду и grep
вывод.
#!/usr/bin/expect
send_user "Device name: "
expect_user -re "(.*)\n"
set host $expect_out(1,string)
send_user "Username: "
expect_user -re "(.*)\n"
set user $expect_out(1,string)
stty -echo
send_user -- "Password: "
expect_user -re "(.*)\n"
set pass $expect_out(1,string)
stty echo
send_user "show int "
expect_user -re "(.*)\n"
set intf $expect_out(1,string)
send_user "\n"
spawn telnet $host
expect "Username:"
send "$user\r"
expect "Password:"
send "$pass\r"
expect ">"
На этом этапе мы вошли в устройство, я хочу выполнить команду "show int xxx" несколько раз и grepвывод для конкретной строки.grep
не находится в Expect, и команда не похожа на sleep
, поэтому я могу циклически выполнить команду show int
, grepping
из моей конкретной строки.Как я могу смешать Expect и Bash следующим образом?
ОБНОВЛЕНИЕ : Я уже довольно много сделал сценарий, выложу полный сценарий, как только преодолею это последнее препятствие.Строка set bytesnow [exec grep "packets input" \< showint | cut -d \ -f 9]
выдает ошибку;
child process exited abnormally
while executing
"exec grep "packets input" < \showint | cut -d \ -f 9"
Но она прекрасно работает в написанном мной тестовом скрипте.Файл ./showint есть, выполнение этой команды в командной строке работает нормально?Я не могу понять, что не так?
ОБНОВЛЕНИЕ : дополнительные исследования (http://wiki.tcl.tk/8489) показал мне, что grep
завершает работу с кодом состояния 1, что означает, что совпадения с образцом не найденыпоставить команду работает нормально из командной строки? Даже с /full/path/to/showint.
END : я исправил свою ошибку, поняв, какой я был дурак,ответил ниже. Спасибо всем за помощь: D