我最近经常使用 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