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

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

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

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

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

Ответ 1

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

$ rlwrap telnet server port

(Я использую nc вместо telnet, потому что он более прост в использовании и более надежный.)

Ответ 2

использовать socat:

socat readline,history=$HOME/.telnet_history TCP:host:23

Ответ 3

Я предполагаю, что это сервис, который вы написали на 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 [email protected] if [email protected];
        print $OUT $res, "\n" unless [email protected];
        $term->addhistory($_) if /\S/;
    }