L'utilitaire attendu peut-il traiter un cas où le processus généré génère également un processus secondaire?

1

J'essaie d'utiliser s'attendre à gérer rsync sur un shell ssh, mais il reste bloqué.

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

rsync -e ssh -<other_params>

Si je joins alors cela dans l'attente:

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

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

Ma meilleure hypothèse est que rsync est en train de générer le processus SSH, et que le processus SSH doit être utilisé pour interagir, mais que send collecte l'identifiant du processus rsync et y envoie les entrées.

Des pensées?

davidparks21
la source
1
Pouvez-vous configurer votre ssh pour une connexion avec clé publique / mot de passe sans mot de passe? Ensuite, vous pouvez vous passer d'attendre. Si ce n'est pas le cas, essayez de créer le sous-processus avec un pty plutôt qu'un tuyau (si c'est ce qu'il fait).
Keith

Réponses:

0

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

Version corrigée:

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