Cómo ejecutar un script en shell cuando se presiona una tecla de acceso directo

14

¿Cómo podría ejecutar un script en Shell cuando se presiona una tecla de acceso directo?

Esencialmente, lo que necesito es que cuando se presiona una tecla de acceso directo, el script debe leer de un archivo y mostrar ese contenido en el terminal.

usuario3539
fuente
Probé el método que usaste, bind '"\e[24~":"airmon-ng start wlan0\n"'pero después de cerrar la terminal, parece que se reinició y todas las teclas de acceso rápido desaparecieron

Respuestas:

20

Puede usar el comando incorporado bindpara asignar un atajo de teclado para que ejecute un comando / script de shell.

Ejemplo

Digamos que queremos ejecutar el comando pwd, cuando presionamos la F12tecla.

$ bind '"\e[24~":"pwd\n"'

Ahora cuando pulso F12en mi sistema, $:

$ pwd
/home/saml

Determinación de atajos de teclado

Puede usar la siguiente técnica para determinar el código de escape para un atajo de teclado dado. En la mayoría de los sistemas, presione Ctrl+ V, suelte y luego presione la tecla para la que desea el código. Hay otros sistemas con los que funcionará en Mlugar deV

Ejemplo

Presionando Ctrl+ Vluego suelte ambos Ctrly Vfinalmente presione F12en una ventana de terminal devuelve esto:

$ ^[[24~

Esta salida se puede interpretar de la siguiente manera, ^[es la Escclave. Entonces, cuando queremos especificar esta tecla en particular usando el bindcomando, necesitamos usar a \epara denotar la Esctecla seguida de todo lo demás desde arriba. Entonces el bindcomando se ve así:

$ bind '"\e[24~":"....."'

Ejecutando un comando en el medio

También puede utilizar bind -xpara configurar métodos abreviados de teclado que ejecutarán comandos mientras está escribiendo algo en el indicador, y se mostrará la salida de estos comandos, pero lo que esté escribiendo en el indicador permanecerá intacto.

$ bind -x '"\eW":"..."'

NOTA: Este método solo funciona con métodos abreviados de teclado que generan 1 carácter, por F12lo que no funcionará aquí.

Ejemplo

Vamos a alias el atajo de teclado Alt+ Shift+ W.

$ bind -x '"\eW":"who"'

Digamos que estoy escribiendo el comando finger:

$ finger

Ahora presiono el atajo de teclado Alt+ Shift+ 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á sucediendo bindes ejecutar el comando definido who, tomar su salida e insertarlo delante del indicador. Si lo repites, verás lo que está sucediendo, 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

Entonces, una idea sería utilizar el bind -xmétodo anterior y catmostrar este archivo de texto en el indicador:

$ 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.txtse muestra arriba de mi fingercomando arriba.

Referencias

slm
fuente
Solo necesito mostrar el contenido, no ejecutarlo.
user3539
Así que únete a un script que muestre el contenido.
Lars Rohrbach
1
Ctrl + m no funciona para mí. Actúa como si acabara de presionar enter. Una alternativa que creo (soy un novato bash) es escribir echo ' (espacio después de la comilla simple), luego presionar Ctrl + v, luego la tecla que desee, y luego el espacio, comilla simple ... como se describe aquí . Ejemplo:echo ' ^[OD '
aliteralmind