使用向上箭头获取 netcat 中的上一个命令

使用向上箭头获取 netcat 中的上一个命令

我最近经常使用 netcat 来测试服务器,使用向上箭头重复以前的命令将非常有帮助。然而现在,它才刚刚进入^[[A。有什么办法可以改变我的这种行为吗?

答案1

有两种可能性。第一个是使用回卷包裹一个阅读线围绕您的程序的历史库netcat。另一种是使用索卡特它有内置的 readline 作为一个选项。

例如,如果您正在使用 netcat 进行 telnet,您可能会说

rlwrap nc -t remotehost 23

然后您输入的每一行都会保存在文件中~/.nc_history,并且可以使用常用的读取行键进行导航。重新运行相同的命令将保留现有的历史记录。

使用 时socat,没有 telnet 选项,但对于其他类型的连接,您可以执行以下操作

socat readline,history=$HOME/.socat.hist TCP4:remotehost:port

如果没有,rlwrap您可以使用 socat 来运行 netcat:

socat readline,history=$HOME/.socat.hist exec:'nc -t remotehost 23'

如果您没有这些程序,但有一个bash带有内置 readline 的 shell,则第三种可能性是让 bash 从终端读取命令并将它们发送到 netcat 的标准输入。以下是执行此操作的一个相当简单的脚本示例,使用相同的nc命令,并在 file 中保存和恢复历史记录/tmp/myhistory

#!/bin/bash
# emulate rlwrap nc -t localhost 23
HISTFILE=/tmp/myhistory
history -r              # read old history
while IFS= read -p 'netcat> ' -e    # sets REPLY, -e enables readline
do  history -s "$REPLY" # add to history
    history -w          # save to file
    echo "$REPLY"       # write to netcat
done |
nc -t remotehost 23

相关内容