如何在 telnet 客户端上实现命令历史记录? (上/下箭头)

Posted

技术标签:

【中文标题】如何在 telnet 客户端上实现命令历史记录? (上/下箭头)【英文标题】:How to implement a command history on a telnet client? (up/down arrows) 【发布时间】:2012-04-06 06:18:28 【问题描述】:

我有一个接受 telnet 连接进行管理的服务器。我想念命令历史,所以我想让我的 telnet 会话支持它。我的问题:

1)我必须在服务器端实现,所以服务器会将过去的命令发送给客户端,然后客户端可以重新执行?

2) 是否有在 telnet 客户端中实现此功能(不与服务器混淆)?

如果答案是 1),那么我需要知道如何在我的 telnet 会话中捕获和发送向上和向下箭头键,而无需按 Enter。

【问题讨论】:

【参考方案1】:

这不是服务器问题。只需将rlwrap 与您的远程登录客户端一起使用。无需编程即可为您提供readline

$ rlwrap telnet server port

(我实际上使用nc 而不是telnet,因为它更易于使用且更健壮。)

【讨论】:

@chrisapotek 请改用 Ctrl-D。【参考方案2】:

使用 socat:

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

【讨论】:

注意:如果省略history,则使用文件$HOME/.history 不适用于最新的 Ubuntu/Debian,不幸的是,due to a licensing issue。【参考方案3】:

我假设这是您用 Perl 编写的服务,基于您的标签。

您可以使用 CPAN 中的 Term::ReadLine 模块来做您想做的事情。来自 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/;
    

【讨论】:

以上是关于如何在 telnet 客户端上实现命令历史记录? (上/下箭头)的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 在 Linux 上实现一键回归测试

使用 Python 在 Linux 上实现一键回归测试

如何使用telnet测试端口号

MATLAB 命令历史记录:如何保存现有历史记录的备份

如何在nginx服务器上实现多媒体流的录制和转码

如何在 NIST PIV 卡上实现 VERIFY 命令?