Comment puis-je vider le tampon d'entrée dans un script expect?

Je suis en train d'écrire un script expect et éprouve de la difficulté à composer avec l'invite du shell (Linux). Mon script expect engendre rlogin et le système distant à l'aide de ksh. L'invite sur le système distant contient le répertoire en cours, suivi par " > " (espace plus grand que l'espace). Un extrait de script peut être:

send "some command here\r"
expect " > "

Cela fonctionne pour les commandes simples, mais les choses commencent à aller mal lors de la commande je suis l'envoi dépasse la largeur de la borne (ou plus précisément, qu' ksh pense est la largeur de la borne). Dans ce cas, ksh fait un peu bizarre de défilement horizontal de l'interactif en ligne de commande, ce qui semble à la réécriture de la rapidité et de coller un extra "> " dans la sortie. Naturellement, cela provoque le script expect de se confondre et de synchronisation quand il semble y avoir plus d'une invite dans la sortie après l'exécution d'une commande (mon script contient plusieurs send/expect paires).

J'ai essayé de changer PS1 sur le système distant à quelque chose de plus distinctifs comme l'invite "> " mais un problème similaire se pose qui m'indique que la n'est pas la bonne façon de résoudre ce problème.

Ce que je pense, pourrait aider, c'est la capacité pour le script de dire s'Attendre à ce que "je sais que je suis correctement synchronisé avec le système à distance à ce point, afin de vider le tampon d'entrée maintenant." Le expect instruction a -notransfer drapeau qui n'est pas jetez le tampon d'entrée, même si le modèle ne correspond pas, donc je pense que j'ai besoin de tout le contraire.

Existe-il d'autres techniques utiles que je peux utiliser pour faire le shell distant se comporter de façon plus prévisible? Je comprends que s'Attendre à passe par beaucoup de travail pour s'assurer que le pondu session apparaît être interactif sur le système distant, mais je préfèrerais que quelques-uns des plus ennuyeux des fonctionnalités interactives (comme le défilement horizontal de ksh) être désactivée.

OriginalL'auteur Greg Hewgill | 2009-12-09