Как реализовать историю команд на клиенте telnet?(стрелки вверх / вниз) - PullRequest
14 голосов
/ 21 марта 2012

У меня есть сервер, который принимает соединения telnet для управления. Я скучаю по истории команд, поэтому хочу, чтобы мой сеанс Telnet поддерживал ее. Мои вопросы:

1) Должен ли я реализовать это на стороне сервера, чтобы сервер отправлял прошлые команды клиенту, а затем клиент мог повторно выполнить?

2) Есть ли способ реализовать эту функцию в клиенте telnet (не связываясь с сервером)?

Если ответ 1), то мне нужно знать, как захватывать и отправлять клавиши со стрелками вверх и вниз в моем сеансе telnet, не нажимая ввод.

Ответы [ 3 ]

40 голосов
/ 21 марта 2012

Это не проблема сервера.Просто используйте rlwrap с вашим клиентом telnet.Он дает вам readline без программирования.

$ rlwrap telnet server port

(на самом деле я использую nc вместо telnet, поскольку он проще в использовании и более надежен)

6 голосов
/ 21 марта 2012

используйте socat:

socat readline,history=$HOME/.telnet_history TCP:host:23
1 голос
/ 21 марта 2012

Я предполагаю, что это сервис, который вы написали на Perl на основе ваших тегов.

Вы можете использовать модуль Term :: ReadLine из CPAN, чтобы делать то, что вы хотите.На веб-сайте CPAN приведен простой пример:

use Term::ReadLine;
    my $term = Term::ReadLine->new('My Management Service');
    my $prompt = "Enter your management command: ";
    my $OUT = $term->OUT || \*STDOUT;
    while ( defined ($_ = $term->readline($prompt)) ) {
        my $res = eval($_);
        warn $@ if $@;
        print $OUT $res, "\n" unless $@;
        $term->addhistory($_) if /\S/;
    }
...