Windows bash 通过服务器上的 ssh 和 Fish shell 将箭头作为符号

Windows bash 通过服务器上的 ssh 和 Fish shell 将箭头作为符号

我有一个有点复杂的问题。我正在使用 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”,那么鱼壳会期待应用方式光标序列,例如^[OAvs ^[[A,看到后者会导致错误处理。

进一步阅读:

答案3

原因:

您正在连接的会话使用与 bash shell 不同的终端模拟。

简单的解决方案:

不要在 ssh 会话中使用箭头键。

更难的解决方案:

研究目标服务器和 Fish shell,并确定它们使用的终端仿真以及更改它的选项。研究您的 Bash for Windows,了解它使用什么终端仿真,以及有哪些选项可以更改它。找到两者之间的重叠部分并实施它。

Windows解决方案:

在 Windows 中使用 Putty(或其他 ssh 客户端软件)直接连接到目标服务器。

Windows 自由开源解决方案:

使用 '终端'或者类似的东西。

硬核解决方案:

编写一个可以运行的 bash 脚本Windows 版 Bash它会自动检测所需的终端仿真并根据具体情况实施,以便您可以远程访问任何启用 ssh 的设备并始终使用箭头键。

相关内容