LINUX.ORG.RU

Сделать «flush» в expect


0

0

День добрый
Столкнулся вот с проблемкой, не выполняется до конца spawn-процесс
Написал вот скрипт который снимает дамп БД (посгрес), понятно дело чтобы передавать пароль скрипту.

[code]
#!/bin/bash
#pg_dump.sh
pass=$1
param=""
for i in $@
do
let a=a+1
if [ $a -lt 2 ]; then
false
else
param=$param" "$i
fi
done
pgexpect.exp $pass "pg_dump $param " | grep -v -E "^Пароль:\s*" | grep -v -E "pg_dumpall:" | grep -v -E "pg_dump:"
[/code]

[code]
#!/usr/bin/expect -f
#pgexpect.exp
if "$argc > 0" {
set pass [lindex $argv 0]
set command [lindex $argv 1]
}
spawn sh -c "$command [lrange $argv 2 end]"
set timeout -1
expect {
"assword:" {
send "$pass\n"
interact -nobuffer
exp_continue
}
"ароль:" {
send "$pass\n"
exp_continue
} "FATAL" {
send_error "ERROR: PERMISSION ERROR !\n";
exit;
} "TCP/IP" {
send_error "ERROR: SERVER DOWN !\n";
exit;
} eof {
exit;
}
}
[/code]

Дасп снимается, только вот не всегда одинаковый по размеру - обрубается в конце, разница может достигать пару десяток строк.
Вот я думаю что буфер не скидывается при окончании работы скрипта, пока не придумал что можно сделать.


Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.