¿Cómo podría ejecutar un script en Shell cuando se presiona una tecla de método abreviado?
Esencialmente, lo que necesito es que cuando se presiona una tecla de método abreviado, la secuencia de comandos debe leerse de un archivo y mostrar ese contenido en la terminal.
Respuesta aceptada:
Puede usar el comando incorporado, bind
para asignar un atajo de teclado para que ejecute un comando/script de shell.
Ejemplo
Digamos que queremos ejecutar el comando, pwd
, cuando presionamos F12 clave.
$ bind '"\e[24~":"pwd\n"'
Ahora cuando presiono F12 a mi indicación, $
:
$ pwd
/home/saml
Determinación de atajos de teclado
Puede utilizar la siguiente técnica para determinar el código de escape para un método abreviado de teclado determinado. En la mayoría de los sistemas presione Ctrl + V , suelte y luego presione la tecla para la que desea el código. Hay algunos otros sistemas con los que funcionará M en lugar de V
Ejemplo
Presionando Ctrl + V luego suelte ambos Ctrl y V y finalmente presione F12 en una ventana de terminal devuelve esto:
$ ^[[24~
Esta salida se puede interpretar de la siguiente manera, ^[
es Esc llave. Entonces, cuando queremos especificar esta clave en particular usando el bind
comando necesitamos usar un \e
para denotar el Esc tecla seguida de todo lo demás desde arriba. Entonces el bind
el comando se ve así:
$ bind '"\e[24~":"....."'
Ejecutar un comando en el medio
También puede hacer uso de bind -x
para configurar atajos de teclado que ejecutarán comandos mientras está escribiendo algo en el indicador, y se mostrará la salida de estos comandos, pero lo que estaba escribiendo en el indicador permanecerá intacto.
$ bind -x '"\eW":"..."'
Ejemplo
Pongamos un alias al método abreviado de teclado Alt + Mayús + W .
$ bind -x '"\eW":"who"'
Digamos que estoy escribiendo el comando finger
:
$ finger
Ahora presiono el atajo de teclado Alt + Mayús + W :
saml tty1 2013-09-01 11:01 (:0)
saml pts/0 2013-09-01 11:03 (:0.0)
saml pts/1 2013-09-01 11:05 (:0.0)
saml pts/2 2013-09-01 11:05 (:0.0)
saml pts/5 2013-09-03 22:45 (:0.0)
$ finger
Lo que está pasando es bind
está ejecutando el comando definido, who
, tomando su salida e insertándola delante del aviso. Si lo repites verás lo que está pasando, aquí hay un resultado de mí golpeándolo 2 veces:
saml tty1 2013-09-01 11:01 (:0)
saml pts/0 2013-09-01 11:03 (:0.0)
saml pts/1 2013-09-01 11:05 (:0.0)
saml pts/2 2013-09-01 11:05 (:0.0)
saml pts/5 2013-09-03 22:45 (:0.0)
saml tty1 2013-09-01 11:01 (:0)
saml pts/0 2013-09-01 11:03 (:0.0)
saml pts/1 2013-09-01 11:05 (:0.0)
saml pts/2 2013-09-01 11:05 (:0.0)
saml pts/5 2013-09-03 22:45 (:0.0)
$ finger
Tu problema
Así que una idea sería usar bind -x
método anterior y cat
para mostrar este archivo de texto en su solicitud:
$ bind -x '"\eW":"cat someinfo.txt"'
Ahora, cuando ejecuto comandos, puedo ver este archivo así:
This is text from some
multi-line file reminding
me how to do some
stuff
$ finger
La salida del archivo someinfo.txt
se muestra encima de mi finger
comando anterior.
Referencias
- En bash, ¿cómo vinculo una tecla de función a un comando?