使箭头和删除键在KornShell命令行中起作用

问题描述 投票:18回答:5

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

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

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

unix shell ksh
5个回答
32
投票

对于箭头键,您可以将其放入主目录中的.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字符。


9
投票

我使用了以下内容,并且运行良好:

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

7
投票

不要打架。只需让您的管理员将您的默认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

0
投票

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


0
投票

由于我花了我很长的时间才能弄清Mac上的删除键,要使删除键起作用,可以将stty erase ^?添加到.kshrc文件中。不用键入^?的实际字符,您只需按Delete键,它将输出^?。因此,结合Tim的答案,我的.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
© www.soinside.com 2019 - 2024. All rights reserved.