Hacer que las teclas de flecha y borrar funcionen en la línea de comando de KornShell

StackOverflow https://stackoverflow.com/questions/1623256

  •  06-07-2019
  •  | 
  •  

Pregunta

Soy nuevo en Unix y estoy usando sun solaris (creo que v10). Tengo mi shell configurado como KornShell (ksh).

Me pregunto cómo hacer que las teclas de flecha y la tecla eliminar funcionen en la línea de comando. He hecho set -o emacs y el retroceso funciona, pero no las teclas de flecha y las teclas de eliminación.

¿También es posible configurar la tecla de flecha arriba y abajo para recorrer el historial de la línea de comandos?

¿Fue útil?

Solución

Para las teclas de flecha, puede poner esto en su archivo .kshrc en su directorio de inicio:

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

Tenga en cuenta que hay dos caracteres de subrayado antes de las letras en el lado izquierdo del signo igual. En el lado derecho de la igualdad, el objetivo es obtener el carácter de control apropiado asignado al alias. La forma en que este script hace eso es ejecutando el comando (a través de back-tics)

echo "\020"

para obtener el carácter control-n asignado a __B.

Otros consejos

Utilicé lo siguiente y funciona bien:

set -o emacs

Nota: estos son los caracteres de control reales. En vi, escriba i ctrl-v y luego ctrl-P (si desea un ctrl-p)

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

y agregue las siguientes líneas también:

alias __A=^P
alias __B=^N
alias __D=^B
alias __C=^F

No luches contra eso. Simplemente haga que su administrador cambie su shell predeterminado a bash. bash se incluye con Solaris 10, es altamente compatible con ksh y admite las asignaciones de teclas que desee. Puede iniciar bash simplemente escribiendo:

$ bash

Podrías ejecutar bash fuera de tu .profile si tu administrador no es útil. Esto es lo que haría su administrador para cambiar user1 a bash (como 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

El valor predeterminado de ksh podría ser ksh88, que no admite las macros de teclado alias __. Ksh93 lo hace. Básicamente, si no funciona, probablemente esté usando ksh88.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top