#!/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!я не уверен, что переопределяю и инициализирую переменные правильно!
>[оверквотинг удален]
> 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!я не уверен, что переопределяю и инициализирую переменные правильно!Вы как-нибудь попроще сформулируйте вопрос, а то помочь я не против, но разбираться во всей этой абракадабре совершенно не хочется...
Сначала я инициализирую переменную:
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") }
Не получается:-(
Итого есть 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'ом разобраться:-(