O utilitário expect pode manipular um caso em que o processo que ele gera também gera um subprocesso?

1

Eu estou tentando usar esperar para lidar com rsync através de um shell ssh, mas fica preso.

Se eu executar meu comando rsync, ele funciona (simplificado aqui): ele solicita minha senha e copia os arquivos para o servidor:

rsync -e ssh -<other_params>

Se eu, então, coloque isso em espera:

expect -d -c "spawn rsync -e ssh -<other_params>" -c "expect password:" -c "send mypass\r"

Ele não executa corretamente, o programa existe e nenhum arquivo é copiado. Mesmo o modo de depuração não está dando muitas pistas.

Meu melhor palpite é que o rsync está gerando o processo ssh, e o processo ssh é o que precisa ser interagido, mas send está pegando o id do processo rsync e enviando a entrada para lá.

Alguma opinião?

    
por davidparks21 27.06.2011 / 08:37

1 resposta

0

A resposta para este problema foi que eu precisava adicionar um comando wait no final do script expect. Como é mostrado na pergunta, estava funcionando, mas estava enviando a senha e, em seguida, imediatamente matando o processo. A adição de espera aguarda a conclusão do processo de rsync.

Versão corrigida:

expect -d -c "spawn rsync -e ssh -<other_params>" -c "expect password:" -c "send mypass\r" -c "wait"
    
por 28.06.2011 / 04:37