我有一个有点复杂的问题。我正在使用 Windows 10 周年更新和 Bash for Ubuntu。我正在通过连接到服务器ssh
。该服务器使用fish shell
.当我按下箭头时,它只会打印一些符号,而不是向我显示命令历史记录或猜测我的下一个命令。这是我所看到的:
- arrow up印刷
[A
- arrow down印刷
[B
- arrow right印刷
[C
- arrow left印刷
[D
然而,箭头在bash
.有什么想法为什么会发生吗?
答案1
我遇到了同样的问题,但设置略有不同:
- WSL,带有 Ubuntu 和 Fish
- 通过 SSH 连接到运行 Ubuntu 和 Bash 的远程服务器
我也通过在远程服务器上安装 Fish 来修复它。
答案2
Windows 10 周年纪念更新与 Ubuntu 的 Bash本质上是在控制台窗口中运行 bash,其转义序列(包括箭头键等输入)记录在 MSDN 中:
就其本身而言,ssh
很大程度上是无关的(它将字符传递到远程计算机或从远程计算机传递字符不变)。重要的是远程计算机使用的终端描述以及 Fish shell 是否初始化事物。
鉴于您正在看到[A
在远程计算机上,这表示您的终端正在发送正常模式光标键(未初始化时的状态)。这与 bash 一致,其配置往往是硬编码的(查看大多数.inputrc
文件)或基于非初始化的“linux”终端描述。在 Windows 端,当然:bash 会“工作”,因为它被配置为与现有的东西一起工作。在远程端,fish shell 使用其中的任何内容TERM
(可能是“xterm”)。如果是“xterm”,那么鱼壳会期待应用方式光标序列,例如^[OA
vs ^[[A
,看到后者会导致错误处理。
进一步阅读:
- 特殊按键(xterm 手册)
- 为什么我不能在(任何)shell 中使用光标键?(xterm 常见问题解答)
答案3
原因:
您正在连接的会话使用与 bash shell 不同的终端模拟。
简单的解决方案:
不要在 ssh 会话中使用箭头键。
更难的解决方案:
研究目标服务器和 Fish shell,并确定它们使用的终端仿真以及更改它的选项。研究您的 Bash for Windows,了解它使用什么终端仿真,以及有哪些选项可以更改它。找到两者之间的重叠部分并实施它。
Windows解决方案:
在 Windows 中使用 Putty(或其他 ssh 客户端软件)直接连接到目标服务器。
Windows 自由开源解决方案:
使用 '终端'或者类似的东西。
硬核解决方案:
编写一个可以运行的 bash 脚本Windows 版 Bash它会自动检测所需的终端仿真并根据具体情况实施,以便您可以远程访问任何启用 ssh 的设备并始终使用箭头键。