Обнаружить консольную подсказку в потоке сеанса VT100 SSH - PullRequest
0 голосов
/ 08 июля 2010

Я работаю над библиотекой-оберткой (в C #, но не очень важной для этой проблемы), чтобы открыть соединение SSH, а затем разрешить отправку команд на сервер и получение ответа.Главное, однако, это то, что я хочу, чтобы командный вызов буферизировал поток ответов, а затем возвращал бы все это как одну строку пользователю, как только оболочка вернулась в консольную строку.Таким образом, я могу просто запустить команду и не иметь дело со всеми событиями ответа каждый раз, когда сервер записывает обратно в консоль во время работы.

Итак, мой главный вопрос в сеансе VT100Есть ли надежный способ определить, что сервер вернулся к приглашению ввода?Единственное, что я нашел до сих пор, это то, что с двумя ssh-серверами, которые я пробовал (cygwin и Fedora), последняя последовательность символов, которую она всегда выводит, это '[esc] [0m' [esc], то есть ASCIIкод 27 Я хотел бы думать, что это что-то стандартное, но когда я посмотрел, что это за последовательность, я обнаружил следующее:

modeoff SGR0, отключить атрибуты символов

Я надеялся на что-то более конкретное, например «Ожидание ввода»: P

Есть идеи, должно ли это работать для всех / большинства систем?Или есть ли способ получше?

1 Ответ

1 голос
/ 09 июля 2010

Атрибуты символов, такие как полужирный, мигающий, тусклый, подчеркнутый, подчеркнутый и т. Д., Являются присвоенными числовыми кодами и могут быть объединены в последовательную последовательность для изменения отображения текста на мониторе.

Последовательность ESC [ 0 m отключает все настройки, возвращая текст в «нормальное состояние», то есть с обычной яркостью и без других визуальных атрибутов.

VT100 просто отображает символы, поступающие через его последовательный порт. То, что представляет собой приглашение, сильно зависит от того, к чему вы подключаете терминал, и, скорее всего, объясняет, почему вы не получили ответ.

Часто системы, в которых есть приглашения, имеют настраиваемые пользователем приглашения, и вполне вероятно, что вы можете испечь скрытую последовательность символов, если не контрольные символы, которые вы затем сможете обнаружить в своем сеансе.

Другим способом, хотя и не таким надежным, является ожидание периода бездействия от хоста, что обычно подразумевает, что он ожидает ввода (но не всегда).

...