Как реализовать историю команд на 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/;
}