退出键、箭头键等在服务器的远程 shell 中不起作用,但在服务器的本地 shell 中起作用

退出键、箭头键等在服务器的远程 shell 中不起作用,但在服务器的本地 shell 中起作用

注意,我在 VMWare Player 上运行这些系统。

参考这个箭头键、Tab 键完成不起作用,看来我应该检查一下我的远程 shell 是否正在运行 bash。根据

echo $0
bash

但是我的箭头键和退出键仍然分别打印以下内容

^[[D^[[A^[[B^[[C^[

为何按键映射这么不稳定?

注意:服务器上的 Bash 和 SSH 版本有点旧(见注释)。客户端是最新的。

更新:我登录了实际的机器,并且 Esc 键等都可以使用。只是当我连接到远程 shell 时,它们就无法工作了。

答案1

从你的上一个问题 我们知道您正在处理旧版 Ubuntu 系统和 bash 3.2 版本。

有些 shell 不支持 readline 库(见我的相关问题关于这一点),这会导致控制字符显示在屏幕上。 Korn shell 和 Dash 就是很好的例子。我找不到它们是否bash 3.2附带 readline 库支持。我会四处打听一下以确保万无一失。

但是,根据您在评论中提供的输出locate readline.so,您的 bash 似乎确实缺少该库。以下是我使用 bash 4.3 的系统上相同命令的输出。

$ locate readline.so                                                           
/lib/x86_64-linux-gnu/libreadline.so.5
/lib/x86_64-linux-gnu/libreadline.so.5.2
/lib/x86_64-linux-gnu/libreadline.so.6
/lib/x86_64-linux-gnu/libreadline.so.6.3

您可以尝试运行set enable-keypad on,但我怀疑如果没有 readline 库这是否会产生任何效果。

显而易见的解决方案是升级 bash,但由于您需要此系统进行信息安全研究,我认为您可能希望保持原样。


我在 unix.stackexchange.com 上问过一个相关问题。您可以检查是否bash使用readlinewithnm命令,如下所示托马斯的回答

相关内容