我经常在 Ubuntu 机器上使用 mysql 命令行客户端。它工作正常,只是按键绑定错误。具体来说,按“Home”、“End”或“Delete”会使其输出 ~(波浪号)字符并发出哔哔声。
我已确定 Home/End 可以通过分别按 Control+A 和 Control+E 来完成,就像在 Mac 终端上一样。我在 Windows 机器上,使用 PuTTY 与 Ubuntu 通信,但 home/end/delete 键在常规命令行上工作正常。我很确定这是 mysql 客户端特有的问题。
我检查了手册文件,但没有找到任何有用的东西。有没有办法将 Home/End/Delete 键绑定到它们的实际功能?也许是我的主目录中的配置文件或类似的东西?
每次我向后移动几个空格来编辑查询并按下删除键时,我最终都必须再次向前移动,这样我就可以使用退格键不仅删除不正确的查询,还可以删除删除键输入的~。
它正在慢慢地把我逼疯。我告诉你,我疯了。疯狂!
答案1
好的,我注意到我的家庭服务器没有问题,通过比较工作服务器和家庭服务器,我最终确定了问题所在。
这是 Ubuntu 9.10 版本中引入的一个错误,我的工作服务器正在运行该版本。具体来说,Ubuntu 9.10 中的 /usr/bin/mysql 版本使用 EditLine 包装器而不是 readline 包装器:
wmartin@work:~$ mysql --version && md5sum /usr/bin/mysql && lsb_release -a
mysql Ver 14.14 Distrib 5.1.37, for debian-linux-gnu (i486) using EditLine wrapper
e23604381e64ac805fdbb8b334ce4d17 /usr/bin/mysql
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 9.10
Release: 9.10
Codename: karmic
与我家服务器上的最新版本进行比较:
wmartin@home:~$ mysql --version && md5sum /usr/bin/mysql && lsb_release -a
mysql Ver 14.14 Distrib 5.1.41, for debian-linux-gnu (i486) using readline 6.1
4274c43798239142576e77c022d35bd1 /usr/bin/mysql
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 10.04.2 LTS
Release: 10.04
Codename: lucid
10.04(以及可能更高版本)运行良好 - mysql 使用 Putty 的默认设置遵守 home/end/delete 键。
因此,解决方案要么是将服务器升级到 10.04 或更高版本,要么使用命令行实用程序rlwrap
将 mysql 客户端包装在 readline 环境中,如博客文章中所述恢复 Ubuntu 9.10(Karmic Koala)MySQL 客户端的 readline 功能。
遗憾的是,这种rlwrap
方法有一个令人讨厌的副作用,就是当你输入密码时,密码会显示出来,而不是隐藏其输出。所以我想我会选择升级路线。
答案2
我认为问题出在您的 PuTTY 设置上 - 在连接窗口的“终端”、“键盘”下 - 将“Home 和 End 键”选项更改为rxvt
。不完美(End 仍然不起作用)但您会得到 Home 和 Delete。
我认为真正的解决方案是使用适当的终端和适当的 SSH;控制台2对于终端来说相当不错,并且 MSYS 或 Cygwin 可以为您提供 SSH(msysgit 已包含它)。
编辑:
听起来你已经发现了 MySQL CLI 中的错误。