Comment puis-je exécuter un script dans Shell lorsqu'une touche de raccourci est enfoncée.
Essentiellement, ce dont j'ai besoin, c'est que lorsque vous appuyez sur une touche de raccourci, le script doit lire à partir d'un fichier et afficher ce contenu dans le terminal.
Réponse acceptée :
Vous pouvez utiliser la commande intégrée, bind
pour mapper un raccourci clavier afin qu'il exécute un script de commande/shell.
Exemple
Disons que nous voulons exécuter la commande, pwd
, lorsque nous appuyons sur F12 clé.
$ bind '"\e[24~":"pwd\n"'
Maintenant, quand j'appuie sur F12 à mon 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 souhaitez obtenir le code. Il existe d'autres systèmes avec lesquels il fonctionnera M au lieu de V
Exemple
En appuyant sur Ctrl + V puis relâchez les deux Ctrl et V et enfin appuyez sur F12 dans une fenêtre de terminal renvoie ceci :
$ ^[[24~
Cette sortie peut être interprétée comme suit, ^[
est le Echap clé. Ainsi, lorsque nous voulons spécifier cette clé particulière en utilisant le bind
commande nous devons utiliser un \e
pour désigner le Esc clé suivie de tout le reste d'en haut. Donc le bind
la commande ressemble à ceci :
$ bind '"\e[24~":"....."'
Exécuter une commande au milieu
Vous pouvez également utiliser bind -x
pour 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 avez tapé à l'invite restera intact.
$ bind -x '"\eW":"..."'
REMARQUE : Cette méthode ne fonctionne qu'avec les raccourcis clavier qui génèrent 1 caractère, donc F12 ne fonctionnera pas ici.
Exemple
Appelons le raccourci clavier Alt + Maj + W .
$ bind -x '"\eW":"who"'
Supposons que je tape la commande finger
:
$ finger
Maintenant, j'appuie sur le raccourci clavier Alt + Maj + 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 est bind
exécute la commande définie, who
, en prenant sa sortie et en l'insérant devant l'invite. Si vous le répétez, vous verrez ce qui se passe, voici le résultat de ma frappe 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
Votre problème
Donc une idée serait d'utiliser le bind -x
méthode ci-dessus et cat
pour 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 suit :
This is text from some
multi-line file reminding
me how to do some
stuff
$ finger
La sortie du fichier someinfo.txt
s'affiche au-dessus de mon finger
commande ci-dessus.
Références
- Dans bash, comment lier une touche de fonction à une commande ?