The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"script на expect'e"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"script на expect'e"  +/
Сообщение от nastr email(??) on 03-Май-12, 11:13 
#!/usr/bin/expect -f
set user "root"
set pass "pass"
set active_mpu_board "192.168.1.2"
set active_mpu_mng   "192.168.1.20"
spawn  /usr/bin/ssh    $active_mpu_board
expect "root@$active_mpu_board's password:"        { send "$pass\r" }
expect {
"root@ATCA-11:/root>"        { set login "root@ATCA-11:/root>" }
"root@ATCA-13:/root>"        { set login "root@ATCA-13:/root>" }
"root@ATCA-7:/root>"        { set login "root@ATCA-7:/root>" }
"root@ATCA-9:/root>"        { set login "root@ATCA-9:/root>" }
"root@ATCA-5:/root>"        { set login "root@ATCA-5:/root>" }
"root@ATCA-3:/root>"        { set login "root@ATCA-3:/root>" }
"root@ATCA-4:/root>"        { set login "root@ATCA-4:/root>" }
}  #я буду заходить на 7 разных платформ и на всех "приветствие" разное
expect "$login"        { send "su - mpumng\r" }
#следующее действие не выполняется, получаю:
#                                            root@ATCA-11:/root> su - mpumng
#                                            mpumng@ATCA-11:~$
#1!после изменения пользователя по su, выполнение скрипта дальше не идёт!
expect {
"mpumng@ATCA-11:~$"        { set mng "mpumng@ATCA-11:~$" }
"mpumng@ATCA-13:~$"        { set mng "mpumng@ATCA-13:~$" }
"mpumng@ATCA-7:~$"        { set mng "mpumng@ATCA-7:~$" }
"mpumng@ATCA-9:~$"        { set mng "mpumng@ATCA-9:~$" }
"mpumng@ATCA-5:~$"        { set mng "mpumng@ATCA-5:~$" }
"mpumng@ATCA-3:~$"        { set mng "mpumng@ATCA-3:~$" }
"mpumng@ATCA-4:~$"        { set mng "mpumng@ATCA-4:~$" }
}
#нужно переопределить переменные active_mpu_mng и active_mpu_board, а так же инициализировать переменные active_lc_mng и active_lc_board,
#2!я не уверен, что переопределяю и инициализирую переменные правильно!
set active_mpu_mng $expect_out(buffer)
expect "$mng"        { send ".........\r"" }
set active_mpu_board $expect_out(buffer)
expect "$mng"        { send ".........\r" }
set active_lc_mng $expect_out(buffer)
expect "$mng"        { send ".........\r" }
set active_lc_board $expect_out(buffer)
expect "$mng"        { send ".........\r" }
expect "$mng"        { send "exit\r" }
expect "$login"        { send "exit\r" }
puts "\nactive_mpu_board=$active_mpu_board\nactive_lc_board=$active_lc_board\nactive_mpu_mng=$active_mpu_mng\nactive_lc_mng=$active_lc_mng\n"


#1!после изменения пользователя по su, выполнение скрипта дальше не идёт!
#2!я не уверен, что переопределяю и инициализирую переменные правильно!

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "script на expect'e"  +/
Сообщение от anonymous (??) on 04-Май-12, 18:10 
>[оверквотинг удален]
> expect "$mng"  { send ".........\r" }
> set active_lc_mng $expect_out(buffer)
> expect "$mng"  { send ".........\r" }
> set active_lc_board $expect_out(buffer)
> expect "$mng"  { send ".........\r" }
> expect "$mng"  { send "exit\r" }
> expect "$login"  { send "exit\r" }
> puts "\nactive_mpu_board=$active_mpu_board\nactive_lc_board=$active_lc_board\nactive_mpu_mng=$active_mpu_mng\nactive_lc_mng=$active_lc_mng\n"
> #1!после изменения пользователя по su, выполнение скрипта дальше не идёт!
> #2!я не уверен, что переопределяю и инициализирую переменные правильно!

Вы как-нибудь попроще сформулируйте вопрос, а то помочь я не против, но разбираться во всей этой абракадабре совершенно не хочется...

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "script на expect'e"  +/
Сообщение от nastr email(??) on 07-Май-12, 10:36 
Сначала я инициализирую переменную:
set active_mpu_board "192.168.1.2"

потом в ходе выполнения скрипта мне нужно ёё переинициализировать, тоесть получить результат какой-то shell'овской команды и присвоить переменной в expect, как это сделать?
пробовал так:
set active_mpu_mng $expect_out(buffer)
expect $mng        { send "BASH COMMAND\r" }

expect $mng        { send "tmp=`BASH COMMAND`\r" }
set active_mpu_board [ $tmp $argv 0 ]

catch { set active_mpu_board $(send "BASH COMMAND\r") }

Не получается:-(

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "script на expect'e"  +/
Сообщение от nastr email(??) on 07-Май-12, 15:14 
Итого есть 2 проблемы:
1) как присвоить переменной expect значения от выполнения команды shell?
2) например следующий текст скрипта expect:
expect $mng { send "ifconfig|awk '{if(index($0,"inet addr:192")){print substr($2,6)}'\r" }
возвращает ошибку:
mpumng@ATCA-11:~$ extra characters after close-quote
    while executing
"send "ifconfig|awk '{if(index($0,"inet addr:192")){print substr($2,6)}'\r" "
    invoked from within
"expect $mng            { send "ifconfig|awk '{if(index($0,"inet addr:192")){print substr($2,6)}'\r" }"
    (file "./test.tcl" line 41)

проблема в передачи потока в awk, символе - |
при выполнение одной команды подобная ошибка не возникает, но передать поток на обработку необходимо.

Спасибо большое за помощь! Не получается у меня с expect'ом разобраться:-(

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру