ksh es seguramente la segunda shell más popular en los sistemas Unix, detrás de Bash y sus variantes. Es una shell muy avanzada, de la que Bash toma muchas de las características que damos por sentadas a la hora de utilizar la línea de comandos. Sin embargo, puede resultar difícil de usar debido a que fue diseñada para ser usada con teclados de terminales, no con los teclados QWERTY modernos.
Configurar ksh para que acepte teclas como las flechas, Inicio (Home), Fin (End), o Retroceso (Backspace) es sencillo, aunque no intuitivo y depende del emulador de terminal que se use. Lo siguiente me funcionó correctamente en Solaris.
Como muchas veces es más sencillo entender las herramientas en vez de intentar cambiarlas a nuestro gusto, veremos primero cómo funciona la edición de la línea de comandos, tanto en ksh como en Bash.
La línea de comandos, así como el historial de órdenes ingresadas, se puede editar de dos modos. En Linux en general el modo predefinido es el modo “emacs”, en el cual lo escrito se puede modificar usando comandos similares a los del editor Emacs. Este editor es bastante más amigable con las teclas especiales que la alternativa, el modo “vi”, en el cual usamos órdenes de vi para editar la línea de comandos (ej.: “dw” borra una palabra).
El modo de edición se cambia usando
set -o *modo*
Donde modo es vi o emacs. Cualquiera de estos modos permite navegar la línea de comandos, aunque no con las flechas del teclado. La siguiente es una tabla incompleta con algunas equivalencias:
Acción | Tecla | modo vi | modo emacs |
---|---|---|---|
Comando anterior | Arriba | k | Ctrl-p |
Comando siguiente | Abajo | j | Ctrl-n |
Caracter anterior | Izquierda | h | Ctrl-b |
Caracter siguiente | Derecha | l | Ctrl-f |
Principio de línea | Inicio | ^ | Ctrl-A |
Fin de línea | Fin | $ | Ctrl-E |
Borrar caracter anterior | Retroceso | X | Ctrl-h |
Borrar caracter siguiente | Suprimir | x | Ctrl-d |
Borrar palabra siguiente | N/A | dw | Ctrl-w |
Como vemos, de forma nativa la shell tiene soporte para las acciones usuales de edición de texto, por lo que lograr que las teclas del teclado moderno funcionen es nada más cuestión de hacer que la shell asigne una tecla particular (ej.: Arriba) a la acción esperada (Comando anterior)
Para decir a ksh que asigne las teclas, debemos agregar lo siguiente al archivo .profile:
set -o emacs
alias __A='^P' # Flecha arriba = Ctrl-P
alias __B='^N' # Flecha abajo = Ctrl-N
alias __C='^F' # Flecha derecha = Ctrl-F
alias __D='^B' # Flecha izquierda = Ctrl-B
alias __H='^A' # Inicio = Ctrl-A
alias __Y='^E' # Fin = Ctrl-E
Notas:
En general lo mejor es no luchar contra el sistema operativo, y cambiar el shell de login cuando es posible, bash tiene un soporte excelente para los teclados modernos. Cuando no es posible cambiar el shell, sin embargo, vale la pena intentar que el uso de la línea de comandos sea lo más cómodo posible.
Activa Javascript para para cargar los comentarios, basados en DISQUS
El Blog de ElCodiguero funciona sobre Pelican