【发布时间】:2010-12-10 01:03:33
【问题描述】:
我是 Unix 新手,正在使用 sun solaris(我认为是 v10)。我将外壳设置为 KornShell (ksh)。
我想知道如何使箭头键和删除键在命令行中工作。我已经完成了 set -o emacs 和退格工作,但不是箭头键和删除键。
也可以设置上下箭头键循环浏览命令行历史吗?
【问题讨论】:
我是 Unix 新手,正在使用 sun solaris(我认为是 v10)。我将外壳设置为 KornShell (ksh)。
我想知道如何使箭头键和删除键在命令行中工作。我已经完成了 set -o emacs 和退格工作,但不是箭头键和删除键。
也可以设置上下箭头键循环浏览命令行历史吗?
【问题讨论】:
不要与之抗争。 只需让您的管理员将您的默认 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
【讨论】:
chsh?
对于箭头键,您可以将其放入主目录中的 .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 字符。
【讨论】:
.mkshrc 文件
^? 的删除键起别名
默认的 ksh 可能是 ksh88 - 它不支持别名 __ 键盘宏。 Ksh93 可以。基本上,如果它不起作用 - 你可能正在使用 ksh88。
【讨论】:
我使用了以下并且工作正常:
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
【讨论】:
因为我花了很长时间才弄清楚我的 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
【讨论】: