URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9447
[ Назад ]

Исходное сообщение
"script на expect'e"

Отправлено nastr , 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!я не уверен, что переопределяю и инициализирую переменные правильно!


Содержание

Сообщения в этом обсуждении
"script на expect'e"
Отправлено anonymous , 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!я не уверен, что переопределяю и инициализирую переменные правильно!

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


"script на expect'e"
Отправлено nastr , 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") }

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


"script на expect'e"
Отправлено nastr , 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'ом разобраться:-(