2010-07-08 25 views
0

Je travaille sur une librairie wrapper (en C#, mais pas vraiment importante pour le problème ici) pour ouvrir une connexion SSH et permettre l'envoi de commandes au serveur et la réception de la réponse . La chose principale, cependant, est que je veux avoir le tampon d'appel de commande le flux de réponse, puis le renvoyer tout comme une chaîne à l'utilisateur une fois que le shell est revenu à l'invite de la console. De cette façon, je peux simplement déclencher une commande et ne pas avoir à gérer tous les événements de réponse à chaque fois que le serveur réécrit sur la console pendant le travail. Donc, ma question principale est, dans une session VT100, y a-t-il une manière infaillible de déterminer que le serveur est revenu à l'invite de saisie? La seule chose que j'ai trouvé jusqu'ici est que, avec les deux serveurs ssh que j'ai essayés (cygwin et Fedora), la dernière séquence de caractères qu'il semble toujours sortir est '[esc] [0m' [esc], étant ASCII Code 27 Je voudrais penser que cela est standard quelque chose, mais quand j'ai regardé ce que la séquence est je trouve ceci:Détecter l'invite de la console dans le flux de session VT100 SSH

modesoff sgr0, Désactiver le caractère attribue

J'étais un peu En espérant quelque chose de plus concret, comme "En attente de saisie": P

Des idées si cela devrait fonctionner pour tous/la plupart des systèmes? Ou s'il y a un meilleur moyen?

Répondre

1

Les attributs de caractères, tels que gras, clignotant, atténué, souligné, mis en surbrillance, etc. sont tous attribués à des codes numériques et peuvent être enchaînés dans une séquence d'échappement pour modifier l'affichage du texte sur le moniteur.

La séquence ESC [ 0 m désactive tous les paramètres, renvoyant le texte à "normal", qui correspond à la luminosité normale et à aucun autre attribut visuel.

Le VT100 affiche simplement les caractères entrant sur son port série. Donc ce qui constitue une invite dépend fortement de ce à quoi vous vous connectez, et explique probablement pourquoi vous n'avez pas de réponse.

Souvent les systèmes qui ont des invites ont des invites personnalisables par l'utilisateur, et il est probable que vous puissiez faire une séquence cachée de caractères, si ce n'est des caractères de contrôle, que vous pouvez ensuite détecter dans votre session.

Une autre méthode, bien que moins fiable, consiste à attendre une durée d'inactivité de la part de l'hôte, ce qui implique généralement qu'elle attend une entrée (mais pas toujours).