标签和箭头键在 redhat 中的奇怪行为
tab and arrow keys weird behavior in redhat
我在尝试使用 Iterm2
或 OSX Terminal
连接到服务器时遇到了一些奇怪的行为。基本上,问题是当使用 tab
进行自动完成时,它会在最后打印一个随机的额外字符,例如:
//the 'e' is extra in this case
$ cd keys/e
并且当尝试使用任何箭头键进行导航时,它基本上根本不起作用。
//^[[C^[[C^[[C^[[C^[[C^[[C^[[C are printed by pressing arrow keys
$ cd keys/^[[C^[[C^[[C^[[C^[[C^[[C^[[Ce
//Kernel Version
OS Version: 2.6.39-400.246.2.el6uek.x86_64
//Distribution Information
$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 6.6 (Santiago)
但它在我的 macbook 上工作得很好,我猜这是由我的服务器配置文件设置引起的,但我仔细检查了我家里没有以下文件之一:
$ vi .bash_profile
$ vi .bashrc
任何帮助将不胜感激。
我想通了,是因为我服务器默认的shell是ksh
,需要请系统管理员改成bash
或者zsh
.
您所说的 "navigation" 是行编辑的一部分。
如果您正在使用 ksh
,最好使用其行编辑功能的方法是打开 emacs 模式:
set -o emacs
显然 ksh 的开发者不使用 vi
,因为 vi 模式非常有限。但是,emacs
模式是默认模式。
在您的问题中,光标键处于 正常模式 (^[[
字符),如果 TERM=linux
,则假定为该模式,而其他终端通常使用应用模式(^[O
个字符)。如果您的 TERM
设置不正确,可能会混淆 ksh
。有些人在他们的 shell 初始化中定义别名以使 shell 与其中任何一个一起工作。
参见示例 Make Arrow and delete keys work in KornShell command line。该答案中的解决方案应该适合您,因为 RHEL6(和 CentOS6)使用 ksh-93:
Name : ksh Relocations: (not relocatable)
Version : 20120801 Vendor: CentOS
Release : 28.el6_7.3 Build Date: Tue Sep 22 11:08:59 2015
Install Date: Mon Mar 28 16:22:50 2016 Build Host: c6b9.bsys.dev.centos>
Group : System Environment/Shells Source RPM: ksh-20120801-28.el6_7.3>
Size : 1743023 License: EPL
Signature : RSA/SHA1, Tue Sep 22 14:35:03 2015, Key ID 0946fca2c105b9de
Packager : CentOS BuildSystem <http://bugs.centos.org>
URL : http://www.kornshell.com/
Summary : The Original ATT Korn Shell
Description :
KSH-93 is the most recent version of the KornShell by David Korn of
AT&T Bell Laboratories.
KornShell is a shell programming language, which is upward compatible
with "sh" (the Bourne Shell).
进一步阅读:
- 2.1 Enabling Command-line Editing(学习科恩语Shell)
- Command Line Editing in Bash and Ksh 笔记
Some actions are also bound to keys with special markings, eg: Up Arrow, Del (or Delete). These are also shown where applicable. Note that these might not work if the terminal emulation is incorrect, ksh
does not support them as well as does bash
.
我在尝试使用 Iterm2
或 OSX Terminal
连接到服务器时遇到了一些奇怪的行为。基本上,问题是当使用 tab
进行自动完成时,它会在最后打印一个随机的额外字符,例如:
//the 'e' is extra in this case
$ cd keys/e
并且当尝试使用任何箭头键进行导航时,它基本上根本不起作用。
//^[[C^[[C^[[C^[[C^[[C^[[C^[[C are printed by pressing arrow keys
$ cd keys/^[[C^[[C^[[C^[[C^[[C^[[C^[[Ce
//Kernel Version
OS Version: 2.6.39-400.246.2.el6uek.x86_64
//Distribution Information
$ cat /etc/redhat-release
Red Hat Enterprise Linux Server release 6.6 (Santiago)
但它在我的 macbook 上工作得很好,我猜这是由我的服务器配置文件设置引起的,但我仔细检查了我家里没有以下文件之一:
$ vi .bash_profile
$ vi .bashrc
任何帮助将不胜感激。
我想通了,是因为我服务器默认的shell是ksh
,需要请系统管理员改成bash
或者zsh
.
您所说的 "navigation" 是行编辑的一部分。
如果您正在使用 ksh
,最好使用其行编辑功能的方法是打开 emacs 模式:
set -o emacs
显然 ksh 的开发者不使用 vi
,因为 vi 模式非常有限。但是,emacs
模式是默认模式。
在您的问题中,光标键处于 正常模式 (^[[
字符),如果 TERM=linux
,则假定为该模式,而其他终端通常使用应用模式(^[O
个字符)。如果您的 TERM
设置不正确,可能会混淆 ksh
。有些人在他们的 shell 初始化中定义别名以使 shell 与其中任何一个一起工作。
参见示例 Make Arrow and delete keys work in KornShell command line。该答案中的解决方案应该适合您,因为 RHEL6(和 CentOS6)使用 ksh-93:
Name : ksh Relocations: (not relocatable)
Version : 20120801 Vendor: CentOS
Release : 28.el6_7.3 Build Date: Tue Sep 22 11:08:59 2015
Install Date: Mon Mar 28 16:22:50 2016 Build Host: c6b9.bsys.dev.centos>
Group : System Environment/Shells Source RPM: ksh-20120801-28.el6_7.3>
Size : 1743023 License: EPL
Signature : RSA/SHA1, Tue Sep 22 14:35:03 2015, Key ID 0946fca2c105b9de
Packager : CentOS BuildSystem <http://bugs.centos.org>
URL : http://www.kornshell.com/
Summary : The Original ATT Korn Shell
Description :
KSH-93 is the most recent version of the KornShell by David Korn of
AT&T Bell Laboratories.
KornShell is a shell programming language, which is upward compatible
with "sh" (the Bourne Shell).
进一步阅读:
- 2.1 Enabling Command-line Editing(学习科恩语Shell)
- Command Line Editing in Bash and Ksh 笔记
Some actions are also bound to keys with special markings, eg: Up Arrow, Del (or Delete). These are also shown where applicable. Note that these might not work if the terminal emulation is incorrect,
ksh
does not support them as well as doesbash
.