Comment attendre plusieurs invites correctement
J'ai un script expect dans lequel je suis actuellement à la recherche de plusieurs types d'invite et d'envoyer les commandes en réponse. Je suis conscient de l'expression régulière correspondant à l'aide de "-re", mais j'aimerais savoir de la bonne façon d'atteindre cet objectif.
Par exemple, j'ai ces types d'invite:
[user@hostname ~]#
user@hostname --->
/ >
-bash-3.00$
cli>
Est-ce le bon/suffisant expression de détecter tous les ci-dessus?
set multiPrompt "(%|#|cli\>|$|\-\-\-\>)"
expect -re $multiPrompt
send "$someCommand\r"
Aussi, j'ai une liste de commandes, certains d'entre eux provoquent l'invite à changer après ils sont exécutés sur le système distant. En raison du changement dans l'invite de commandes, les commandes restantes ne sont pas envoyés parce que mon script expect est pas en mesure de détecter le changement et effectuer l'action d'envoi.
Ce que je suis en train de faire est de créer un pool de possible invites, de sorte que mon script expect envoie les commandes à travers, sans manquer aucun d'entre eux. Mon approche correcte?
.*
suffirait.Otoh, que, ça dépend de ce que les différentes invites et les utilisateurs que vous souhaitez soutenir. Si votre script est uniquement pour l'automatisation de Bill Gates PC à la maison, vous devriez mettre
[email protected]
dans la regexp. Si vous voulez soutenir toutes les questions, y compris celles que l'utilisateur a modifié librement, vous êtes hors de la chance. Vous ne pouvez pas éventuellement correspondre à ce que. Si vous voulez correspondre à la norme de l'invite de tout de la coquille et du programme dans le monde, bonne chance avec la recherche.OriginalL'auteur Jenson Jose | 2013-04-26
Vous devez vous connecter pour publier un commentaire.
Tout en utilisant une expression régulière pour détecter les invites est la bonne chose, le choix d'un bon est difficile quand vous avez un large éventail de possibilités. Par exemple, je parie que cette RE de travail:
(Juste détecte la fin de l'invite, et ignore tous les trucs avant. Il n'y a quasiment toujours un espace à la fin de l'invite de commandes, visuellement distincte de ce que les utilisateurs de type à partir de l'invite.)
Cependant, le problème est que cette nouvelle est assez probable pour correspondre à d'autres choses. Vous devriez plutôt être mieux de changer l'invite à une et unique valeur (généralement par la mise en au
PS1
variable d'environnement sur le périphérique distant), de sorte que vous obtenez une détection fiable. Rappelez-vous, c'est seulement approprié lorsque vous n'êtes pas exposer les instructions de retour pour les utilisateurs, ce qui est vrai pour certaines utilisations d'attendre et pas d'autres...OriginalL'auteur Donal Fellows
Je sais que c'est un vieux thread, mais pour toute personne à la recherche sur ce j'espère que cette aide. Je suis un UNIX sysadmin et avoir une poignée de s'attendre à des scripts de mon programme d'appels pour différents admin fonctions. C'est la seule solution que j'ai trouvé qui fonctionne dans tous mes cas d'utilisation:
La
[string trim $prompt]
gère les scénarios où quelques invites ont une espace avant l'entrée et ce n'est pas en découpant l'espace lorsqu'il regarde à l'invite de commandes. Exemple: "mot de passe:" et "mot de passe: "OriginalL'auteur Chad C