1 votes

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

Je tente d'utiliser expect pour gérer rsync via un shell ssh, mais il reste bloqué.

Si j'exécute 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 ensuite cela dans un expect :

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

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

Je suppose que rsync crée le processus ssh, et c'est le processus ssh avec lequel il faut interagir, 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 j'avais besoin d'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 permet d'attendre que le processus rsync se termine.

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