Мне нужно автоматизировать процесс сбора статистики для oracle, написал следующий скрипт:
#!/usr/bin/expect -f
spawn /bin/sh
expect "hostname:~ #" { send "su - oracle\r" }
expect "oracle@hostname:~>" { send "sqlplus "/as sysdba"\r" }
expect "SQL>" { send "@/opt/oracle/product/11g/rdbms/admin/awrrpt.sql\r" }
expect "Enter value for report_type" { send "html\r" }
expect "Enter value for num_days" { send "2\r" }
#
#на stdout валится следующее:
#Instance DB Name Snap Id Snap Started Level
#------------ ------------ --------- ------------------ -----
#wisg WISG 3953 13 Jun 2012 00:00 1
# 3954 13 Jun 2012 01:00 1
# 3955 13 Jun 2012 02:00 1
# 3956 13 Jun 2012 03:00 1
# 3957 13 Jun 2012 04:00 1
# 3958 13 Jun 2012 05:00 1
# 3959 13 Jun 2012 06:00 1
# 3960 13 Jun 2012 07:00 1
# 3961 13 Jun 2012 08:00 1
# 3962 13 Jun 2012 09:00 1
# 3963 13 Jun 2012 10:00 1
# 3964 13 Jun 2012 11:00 1
# 3965 13 Jun 2012 12:00 1
# 3966 13 Jun 2012 13:00 1
# 3967 13 Jun 2012 14:00 1
# 3968 13 Jun 2012 15:00 1
# 3969 13 Jun 2012 16:00 1
# 3970 13 Jun 2012 17:00 1
# 3971 13 Jun 2012 18:00 1
# 3972 13 Jun 2012 19:00 1
# 3973 13 Jun 2012 20:00 1
# 3974 13 Jun 2012 21:00 1
# 3975 13 Jun 2012 22:00 1
# 3976 13 Jun 2012 23:00 1
# 3977 14 Jun 2012 00:00 1
# 3978 14 Jun 2012 01:00 1
#
expect {
"2012 23:00" { set begin_snap "в переменнуж должно записаться 3976" }
"2012 00:00" { set end_snap "в переменнуж должно записаться 3977" }
}
expect "Enter value for begin_snap" { send "$begin_snap\r" }
expect "Enter value for end_snap" { send "$end_snap\r" }
expect "Enter value for report_name" { send "\r" }
expect "SQL>" { send "exit\r" }
expect "oracle@hostname:~>" { send "exit\r" }Перепробовал множество способов, но так и не нашел решения как в expect скрипте записать в переменную значение из stdout.
Помогите пожалуйста решить этот вопрос! Заранее спасибо!