Ожидайте, что выходные данные команды будут сохранены в переменной - PullRequest
0 голосов
/ 21 июля 2010

Я написал ниже скрипт.


#! /usr/bin/expect
set timeout 180
spawn /vobs/iov/rnc/bin/moshell/moshell -d db.dat
expect {
  -re "OFFLINE_DB.DAT.*" { }
        timeout        { 
     error "\n######## Timeout - when logging in\n"
 }
        eof            { 
     error "\n######## eof - when logging in\n"
 } 
}

set db_prompt "SQL>"
send "select id from motype_r1 where data = 'PlugInUnit';\r"
expect {
  -re "OFFLINE_DB.DAT>"  
}    
 exit

Теперь я хочу получить вывод таблицы в переменной, т.е.

+------+
| id   |
+------+
|   19 |
+------+
Query Done: 1 record selected

и соответствоватьрегулярное выражение для получения '19' в еще одной переменной.

Может кто-нибудь, пожалуйста, помогите мне с решением.

/ Akshya

1 Ответ

1 голос
/ 21 июля 2010

В этом блоке кода вы сможете использовать регулярное выражение для сопоставления с выводом запроса SELECT, а затем сохранить его в переменной.

send "select id from motype_r1 where data = 'PlugInUnit';\r"
expect {
  -re {(\|[^\d]*(\d+).*\|)} { set id $expect_out(1,string) ; exp_continue }
  -re "OFFLINE_DB.DAT>"  
}

(Простите за несколько уродливое регулярное выражение, котороеЯ использовал, но он должен совпадать с последним числовым идентификатором в операторе возврата.)

* $expect_out(1,string) относится к первому совпадению строки в регулярном выражении, тогда exp_continue вызовет ожидаемое продолжение ожидаемого вывода, пока не увидитсообщение «OFFLINE_DB.DAT» (кстати, мне не нужен префикс -re).

Надеюсь, это работает!

...