通过SSH连接Gerrit GSQL无法使用上箭头调取历史命令
这个问题我之前也碰到过,核心原因是两种SSH会话的终端环境完全不同,具体拆解如下:
问题根源
- 直接SSH登录远程主机时,你启动的是一个交互式登录shell:远程Ubuntu的shell会自动加载你的个人配置(比如
~/.bashrc、~/.inputrc),初始化终端的行编辑功能(依赖readline库),所以上下箭头能被正确解析成调用历史命令的操作。 - 而你用
ssh <gerrit host>:29418 gerrit gsql这种方式时,属于非交互式非登录会话:远程端不会为这个临时命令加载shell的交互配置,gerrit gsql运行在没有readline支持的原始终端环境里,终端发送的箭头键转义序列(就是你看到的^[[A这类字符)无法被解析,只能直接显示出来。
解决办法
快速临时修复:强制分配伪终端
给SSH命令加上-t参数,强制远程端分配一个伪终端(pseudo-terminal),让gerrit gsql运行在交互式环境下:
ssh -t <gerrit host>:29418 gerrit gsql
执行这个命令后再按上下箭头,就能正常调用历史查询语句了。
长期便捷优化:配置SSH别名
如果经常需要使用这个命令,可以在本地Windows的SSH配置文件里(比如Git Bash/Mingw64下的~/.ssh/config,没有的话直接新建一个)添加以下配置:
Host gerrit-gsql HostName <你的Gerrit主机地址> Port 29418 RequestTTY force RemoteCommand gerrit gsql
之后你只需要在终端输入ssh gerrit-gsql,就能直接进入带历史功能的GSQL环境了。
内容的提问来源于stack exchange,提问作者ObigOne
相关产品推荐
相关产品推荐

