Come posso eseguire uno script in Shell quando viene premuto un tasto di scelta rapida.
In sostanza, ciò di cui ho bisogno è che quando viene premuto un tasto di scelta rapida, lo script dovrebbe leggere da un file e visualizzare quel contenuto nel terminale.
Risposta accettata:
Puoi usare il comando integrato, bind
per mappare una scorciatoia da tastiera in modo che esegua uno script di comando/shell.
Esempio
Supponiamo di voler eseguire il comando pwd
, quando premiamo F12 chiave.
$ bind '"\e[24~":"pwd\n"'
Ora quando premo F12 alla mia richiesta, $
:
$ pwd
/home/saml
Determinazione delle scorciatoie da tastiera
È possibile utilizzare la tecnica seguente per determinare il codice di escape per una determinata scorciatoia da tastiera. Sulla maggior parte dei sistemi premi Ctrl + V , rilasciare e quindi premere il tasto per il quale si desidera inserire il codice. Ci sono altri sistemi con cui funzionerà M invece di V
Esempio
Premendo Ctrl + V quindi rilascia entrambi Ctrl e V e infine premi F12 in una finestra di terminale restituisce questo:
$ ^[[24~
Questo output può essere interpretato come segue, ^[
è Esc chiave. Quindi, quando vogliamo specificare questa particolare chiave usando il bind
comando dobbiamo usare un \e
per indicare Esc chiave seguita da tutto il resto dall'alto. Quindi il bind
il comando ha questo aspetto:
$ bind '"\e[24~":"....."'
Eseguire un comando nel mezzo
Puoi anche utilizzare bind -x
per impostare le scorciatoie da tastiera che eseguiranno i comandi mentre stai digitando qualcosa al prompt e verrà visualizzato l'output di questi comandi, ma tutto ciò che stavi digitando al prompt rimarrà intatto.
$ bind -x '"\eW":"..."'
NOTA: Questo metodo funziona solo con le scorciatoie da tastiera che generano 1 carattere, quindi F12 non funzionerà qui.
Esempio
Definiamo la scorciatoia da tastiera Alt + Maiusc + C .
$ bind -x '"\eW":"who"'
Supponiamo che sto digitando il comando finger
:
$ finger
Ora premo la scorciatoia da tastiera Alt + Maiusc + C :
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 è bind
sta eseguendo il comando definito, who
, prendendo il suo output e inserendolo davanti al prompt. Se lo ripeti vedrai cosa sta succedendo, ecco l'output di me che lo colpisco 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 usare bind -x
metodo sopra e cat
per visualizzare questo file di testo quando richiesto:
$ 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.txt
viene visualizzato sopra il mio finger
comando sopra.
Riferimenti
- In bash, come posso associare un tasto funzione a un comando?