Как определить, что удаленный tty ожидает ввода? - PullRequest
1 голос
/ 10 августа 2011

Ранее я использовал Tk / Expect вместе с plink (PuTTY) для автоматизации операций удаленной оболочки. Тем не менее, Expect иногда завершается ошибкой, если разные оболочки имеют разные подсказки или символы подсказки появляются в выводе без приглашения оболочки (!)

Я хочу знать, есть ли способ узнать, ожидает ли ввод удаленная оболочка, либо через plink, либо из какой-либо сторонней библиотеки. Я в порядке программирования на уровне сокетов, если это необходимо.

1 Ответ

2 голосов
/ 10 августа 2011

Нет, нет способа надежно определить подсказку оболочки на том уровне, на котором вы работаете.Некоторые альтернативные варианты могут быть:

  • Всегда запускайте команды, которые будут печатать некоторые распознаваемые выходные данные после их завершения, например, doSomething ; echo uniqueStringThatMeansThatWeAreDone, а затем ищите эту строку.Сценарий автоматизации устанавливает запрос, который он распознает при входе в систему. Если вы не знаете, какую оболочку вы используете, просто exec тот, который вам нужен.
  • Используйте SSHбиблиотека, которая может выполнять команды напрямую, а не пытаться писать сценарий оболочки.Я не знаком с тем, что доступно в Tcl, но в Perl есть Net::SSH::Perl, что позволит вам делать такие вещи, как:

    my $ssh = Net::SSH::Perl->new("remotehost");
    $ssh->login("user", "pass");
    my $output = $ssh->cmd("doSomething");
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...