19

我是 Unix 新手,正在使用 sun solaris(我认为是 v10)。我将外壳设置为 KornShell (ksh)。

我想知道如何使箭头键和删除键在命令行中工作。我已经完成了 set -o emacs 和退格工作,但没有箭头键和删除键。

也可以设置向上和向下箭头键来循环浏览命令行历史记录吗?

4

5 回答 5

34

对于箭头键,您可以将其放入主目录中的 .kshrc 文件中:

set -o emacs
alias __A=`echo "\020"`     # up arrow = ^p = back a command
alias __B=`echo "\016"`     # down arrow = ^n = down a command
alias __C=`echo "\006"`     # right arrow = ^f = forward a character
alias __D=`echo "\002"`     # left arrow = ^b = back a character
alias __H=`echo "\001"`     # home = ^a = start of line
alias __Y=`echo "\005"`     # end = ^e = end of line

请注意,等号左侧的字母前有两个下划线字符。在等号的右侧,目标是获得分配给别名的正确控制字符。该脚本执行此操作的方式是运行命令(通过 back-tics)

echo "\020"

获取分配给 __B 的 control-n 字符。

于 2010-03-29T17:24:51.653 回答
10

我使用了以下并且工作正常:

set -o emacs

注意:这些是实际的控制字符。在 vi 中,输入 i ctrl-v 然后 ctrl-P(如果你想要 ctrl-p)

alias _A=^P
alias _B=^N
alias _D=^B
alias _C=^F

并添加以下行:

alias __A=^P
alias __B=^N
alias __D=^B
alias __C=^F
于 2012-11-30T10:12:41.120 回答
6

不要与之抗争。只需让您的管理员将您的默认 shell 更改为 bash。bash 包含在 Solaris 10 中,与 ksh 高度兼容,并且它支持您喜欢的键映射。您只需键入以下内容即可启动 bash:

$ bash

如果您的管理员没有帮助,您可以从 .profile 中执行 bash。以下是您的管理员将 user1 更改为 bash(以 root 身份)的操作:

# passwd -e user1
Old shell: /bin/ksh
New shell: /usr/bin/bash        <- You type this, use whence bash to look up the path
passwd: password information changed for user1
于 2009-12-01T23:46:42.933 回答
0

默认的 ksh 可能是 ksh88 - 它不支持别名 __ 键盘宏。Ksh93 可以。基本上,如果它不起作用 - 您可能正在使用 ksh88。

于 2011-08-03T21:10:39.357 回答
0

因为我花了很长时间才弄清楚我的 Mac 上的删除键,所以要让删除键工作,你可以添加stty erase ^?到你的.kshrc文件中。无需为^?您输入实际字符,只需点击删除键,它就会输出^?. 所以结合蒂姆的回答,我的.kshrc文件看起来像

set -o emacs
alias __A=`echo "\020"`     # up arrow = ^p = back a command
alias __B=`echo "\016"`     # down arrow = ^n = down a command
alias __C=`echo "\006"`     # right arrow = ^f = forward a character
alias __D=`echo "\002"`     # left arrow = ^b = back a character
alias __H=`echo "\001"`     # home = ^a = start of line
alias __Y=`echo "\005"`     # end = ^e = end of line
stty erase                  # prevent command from being echoed
stty erase ^?               # allow for delete key to work
于 2019-11-15T16:01:07.420 回答