Заставить стрелки и клавиши удаления работать в командной строке KornShell

Я новичок в Unix и использую sun solaris (думаю, v10). Моя оболочка установлена ​​как KornShell (ksh).

Мне интересно, как заставить клавиши со стрелками и клавишу удаления работать в командной строке. Я сделал set -o emacs, и backspace работает, но не клавиши со стрелками и клавиши удаления.

Также можно ли настроить клавиши со стрелками вверх и вниз для циклического просмотра истории командной строки?


person user66854    schedule 26.10.2009    source источник


Ответы (5)


Для клавиш со стрелками вы можете поместить это в свой файл .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

Обратите внимание, что перед буквами слева от знака равенства стоят два символа подчеркивания. В правой части равенства цель состоит в том, чтобы получить правильный управляющий символ, назначенный псевдониму. Этот скрипт делает это, запуская команду (через обратные тики)

echo "\020"

чтобы получить управляющий символ n, назначенный __B.

person Tim    schedule 29.03.2010
comment
Было бы полезнее, если бы вы могли сказать, что делают приведенные выше строки? - person nikhil; 22.02.2012
comment
Кроме того, если у вас нет файла .kshrc, создайте его и добавьте в него вышеуказанное содержимое. Установите ENV с помощью следующей команды ENV=$HOME/.kshrc; экспорт ENV снова убедитесь, выполнив команду printenv - person RaMs_YearnsToLearn; 14.12.2015
comment
Обратите внимание, что pdksh и mksh используют файл .mkshrc. - person thecarpy; 25.08.2017
comment
Что делает __A? Является ли это произвольным или необходимым для привязки к стрелке вверх? Что делать, если я хочу использовать псевдоним для клавиши удаления для ^? - person knueser; 15.11.2019

Я использовал следующее и работает нормально:

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
person Vishal    schedule 30.11.2012

Не борись с этим. Просто попросите администратора изменить оболочку по умолчанию на bash. bash входит в состав Solaris 10, хорошо совместим с ksh и поддерживает нужные вам сопоставления клавиш. Вы можете запустить bash, просто набрав:

$ bash

Вы можете выполнить bash из своего .profile, если ваш администратор не поможет. Вот что сделал бы ваш администратор, чтобы изменить 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
person Bob Stark    schedule 01.12.2009
comment
В Solaris 10 нет chsh? - person Josh Lee; 02.12.2009

По умолчанию ksh может быть ksh88, который не поддерживает псевдоним __ макросов клавиатуры. Кш93 делает. По сути, если это не работает - вы, вероятно, используете ksh88.

person Smh    schedule 03.08.2011

Поскольку мне потребовалась целая вечность, чтобы найти ключ удаления на моем 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
person knueser    schedule 15.11.2019