1 votes

Le programme expect peut-il gérer un cas où le processus qu'il crée engendre également un sous-processus?

Je suis en train d'essayer d'utiliser expect pour gérer rsync via un shell ssh, mais ça reste bloqué.

Si je lance ma commande rsync, ça fonctionne (simplifié ici) : Il me demande mon mot de passe et copie les fichiers sur le serveur :

rsync -e ssh -

Si j'encadre cela avec expect :

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

Ça ne s'exécute pas correctement, le programme se ferme et aucun fichier n'est copié. Même le mode debug ne donne pas beaucoup d'indices.

Je pense que rsync lance le processus ssh, et c'est le processus ssh qui doit être interagi avec, mais send récupère l'identifiant du processus rsync et envoie l'entrée là-bas.

Des idées ?

0voto

davidparks21 Points 1560

La réponse à ce problème était que je devais ajouter une commande d'attente à la fin du script expect. Comme le montre la question, cela fonctionnait, mais il envoyait le mot de passe puis tuait immédiatement le processus. Ajouter wait attend que le processus rsync soit terminé.

Version corrigée:

expect -d -c "spawn rsync -e ssh -" -c "expect password:" -c "send mypass\r" -c "wait"

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X