Comandos de script (tubulação) em uma sessão de telnet

1

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

    
por javadude 30.06.2010 / 04:11

3 respostas

4

"esperar" é a maneira usual de criar scripts dessas interações.

link

    
por 30.06.2010 / 04:25
0

+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.

    
por 30.06.2010 / 06:49
0

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.

    
por 22.10.2010 / 08:24