Comment exécuter un script dans le shell lorsqu'une touche de raccourci est enfoncée

14

Comment pourrais-je exécuter un script dans Shell lorsqu'une touche de raccourci est enfoncée.

Essentiellement, ce dont j'ai besoin, c'est quand une touche de raccourci est enfoncée, le script doit lire un fichier et afficher ce contenu dans le terminal.

user3539
la source
J'ai essayé la méthode que vous avez utilisée bind '"\e[24~":"airmon-ng start wlan0\n"'mais après avoir fermé le terminal, la chose semble être réinitialisée et tous les raccourcis clavier ont disparu

Réponses:

20

Vous pouvez utiliser la commande intégrée bindpour mapper un raccourci clavier afin qu'il exécute un script de commande / shell.

Exemple

Disons que nous voulons exécuter la commande,, pwdlorsque nous appuyons sur la F12touche.

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

Maintenant , quand je presse F12mon invite, $:

$ pwd
/home/saml

Déterminer les raccourcis clavier

Vous pouvez utiliser la technique suivante pour déterminer le code d'échappement d'un raccourci clavier donné. Sur la plupart des systèmes, appuyez sur Ctrl+ V, relâchez, puis appuyez sur la touche pour laquelle vous voulez le code. Il existe d'autres systèmes avec Mlesquels il fonctionnera au lieu deV

Exemple

Appuyez sur Ctrl+ Vpuis relâchez les deux Ctrlet Venfin appuyez sur F12dans une fenêtre de terminal pour retourner ceci:

$ ^[[24~

Cette sortie peut être interprétée comme suit, ^[c'est la Escclé. Donc, lorsque nous voulons spécifier cette clé particulière à l'aide de la bindcommande, nous devons utiliser un \epour désigner la Escclé suivie de tout le reste d'en haut. La bindcommande ressemble donc à ceci:

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

Exécution d'une commande au milieu

Vous pouvez également utiliser bind -xpour configurer des raccourcis clavier qui exécuteront des commandes pendant que vous êtes en train de taper quelque chose à l'invite, et la sortie de ces commandes sera affichée, mais ce que vous tapiez à l'invite restera intact.

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

REMARQUE: cette méthode fonctionne uniquement avec les raccourcis clavier qui produisent 1 caractère, donc F12ne fonctionnera pas ici.

Exemple

Alias ​​le raccourci clavier Alt+ Shift+ W.

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

Disons que je tape la commande finger:

$ finger

Maintenant, je frappe le raccourci clavier 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

Ce qui se passe, c'est d' bindexécuter la commande définie, de whoprendre sa sortie et de l'insérer devant l'invite. Si vous le répétez, vous verrez ce qui se passe, voici la sortie de moi en le frappant 2 fois:

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

Ton problème

Une idée serait donc d'utiliser la bind -xméthode ci-dessus et catd'afficher ce fichier texte à votre invite:

$ bind -x '"\eW":"cat someinfo.txt"'

Maintenant, lorsque j'exécute des commandes, je peux voir ce fichier comme ceci:

This is text from some 
multi-line file reminding
me how to do some 
stuff
$ finger 

La sortie du fichier someinfo.txtest affichée au-dessus de ma fingercommande ci-dessus.

Les références

slm
la source
J'ai seulement besoin d'afficher le contenu, pas de l'exécuter.
user3539
Alors liez à un script qui affiche le contenu.
Lars Rohrbach
1
Ctrl + m ne fonctionne pas pour moi. C'est comme si je venais d'appuyer sur Entrée. Une alternative, je pense (je suis un débutant bash) est de taper echo ' (espace après le guillemet simple), puis appuyez sur Ctrl + v, puis sur la touche que vous voulez, puis sur espace, guillemet simple ... comme décrit ici . Exemple:echo ' ^[OD '
aliteralmind