"esperar" é a maneira usual de criar scripts dessas interações.
Eu uso um cronjob para executar uma transferência de arquivos para um host e, em seguida, telnet no host e canalizar alguns comandos para ele.
HOST=somehost
USER=postgres
PASSWD=blabla
ftp -n -v $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
put schema_1.sql
put schema_2.sql
quit
END_SCRIPT
(sleep 20;
echo "blabla2";
sleep 5;
echo "psql -d cb3db -f schema_1.sql";
echo "psql -d cb3db -f schema_2.sql";
echo "rm *.sql";
echo "exit;"
) | telnet -l postgres somehost
echo "END OF REMOTE SCRIPT" ||:
parece que o pipeline / echo na sessão é executado paralelamente, acontece que a saída é executada antes do sql terminar a execução. Eu tentei dormir antes do comando de saída, mas isso é um jogo de adivinhação.
Eu sei que esta abordagem não é certamente a mais segura por causa de senhas, etc. Então, se há uma maneira mais segura e segura de fazer o trabalho, me avise.
Obrigado por qualquer dica
"esperar" é a maneira usual de criar scripts dessas interações.
+1 para esperar.
No entanto, se você é como eu, você encontrará tcl (a língua nativa da expectativa) extremamente dolorosa.
Se você analisar o artigo da wikipedia, verá que há ligações perl e python (e certamente outras) para esperar que permitem fazer todas as coisas interativas que você precisa com muito menos dor no código.
Melhor da sorte.
O Perl também tem IPC :: Run que estou começando a usar depois de usar o Expect (em Tcl e perl) bastante. Meu código baseado em IPC::Run
tende a ser mais curto e mais fácil de ler quando eu terminar.