Come eseguire uno script nella shell quando viene premuto un tasto di scelta rapida


14

Come posso eseguire uno script in Shell quando viene premuto un tasto di scelta rapida.

Essenzialmente ciò di cui ho bisogno è quando viene premuto un tasto di scelta rapida, lo script dovrebbe leggere da un file e visualizzare quel contenuto nel terminale.


Ho provato il metodo che hai usato, bind '"\e[24~":"airmon-ng start wlan0\n"'ma dopo aver chiuso il terminale, la cosa sembra essere ripristinata e tutti i tasti di scelta rapida sono andati

Risposte:


20

È possibile utilizzare il comando incorporato bindper mappare una scorciatoia da tastiera in modo che esegua uno script di comando / shell.

Esempio

Supponiamo di voler eseguire il comando pwdquando premiamo il F12tasto.

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

Ora, quando premo F12il mio prompt $:

$ pwd
/home/saml

Determinazione delle scorciatoie da tastiera

È possibile utilizzare la seguente tecnica per determinare il codice di escape per una determinata scorciatoia da tastiera. Sulla maggior parte dei sistemi premere Ctrl+ V, rilasciare e quindi premere il tasto per il quale si desidera il codice. Ci sono altri sistemi con cui funzionerà Minvece diV

Esempio

Premere Ctrl+ Vquindi rilasciare entrambi Ctrle Vinfine premere F12in una finestra del terminale per restituire questo:

$ ^[[24~

Questo output può essere interpretato come segue, ^[è la Escchiave. Quindi, quando vogliamo specificare questa chiave particolare usando il bindcomando, dobbiamo usare a \eper indicare la Escchiave seguita da tutto il resto dall'alto. Quindi il bindcomando è simile al seguente:

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

Esecuzione di un comando nel mezzo

È inoltre possibile utilizzare bind -xper impostare le scorciatoie da tastiera che eseguiranno i comandi mentre si sta digitando qualcosa al prompt e l'output di questi comandi verrà visualizzato, ma tutto ciò che si stava digitando al prompt rimarrà intatto.

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

NOTA: questo metodo funziona solo con le scorciatoie da tastiera che generano 1 carattere, quindi F12non funzionerà qui.

Esempio

Alias ​​la scorciatoia da tastiera Alt+ Shift+ W.

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

Di 'che sto digitando il comando finger:

$ finger

Ora premo la scorciatoia da tastiera 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

Quello che sta succedendo è che bindsta eseguendo il comando definito who, prendendo il suo output e inserendolo di fronte al prompt. Se lo ripeti vedrai cosa sta succedendo, ecco l'output da me colpendolo 2 volte:

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

Il tuo problema

Quindi un'idea sarebbe quella di utilizzare il bind -xmetodo sopra e catdi visualizzare questo file di testo al tuo prompt:

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

Ora quando eseguo i comandi posso vedere questo file in questo modo:

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

L'output del file someinfo.txtviene visualizzato sopra il mio fingercomando sopra.

Riferimenti


Ho solo bisogno di visualizzare i contenuti, non di eseguirli.
user3539

Quindi associa uno script che visualizzi il contenuto.
Lars Rohrbach,

1
Ctrl + m non funziona per me. Si comporta come se avessi appena premuto Invio. Un'alternativa che penso (sono un principiante bash) è quella di digitare echo ' (spazio dopo la virgoletta singola), quindi premere Ctrl + v, quindi il tasto desiderato, quindi spazio, virgoletta singola ... come descritto qui . Esempio:echo ' ^[OD '
aliteralmind,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.