Jak mohu spustit skript v prostředí Shell, když je stisknuta klávesová zkratka.
V podstatě to, co potřebuji, je, že když je stisknuta klávesová zkratka, skript by měl číst ze souboru a zobrazit tento obsah v terminálu.
Přijatá odpověď:
Můžete použít vestavěný příkaz bind
k mapování klávesové zkratky tak, aby spouštěla příkazový/shell skript.
Příklad
Řekněme, že chceme spustit příkaz pwd
, když stiskneme F12 klíč.
$ bind '"\e[24~":"pwd\n"'
Nyní, když stisknu F12 na mou výzvu, $
:
$ pwd
/home/saml
Určování klávesových zkratek
K určení escape kódu pro danou klávesovou zkratku můžete použít následující techniku. Na většině systémů stiskněte Ctrl + V , uvolněte a poté stiskněte klávesu, pro kterou chcete kód. Existují některé další systémy, které budou fungovat s M místo V
Příklad
Stiskněte Ctrl + V pak uvolněte oba Ctrl a V a nakonec stiskněte F12 v okně terminálu vrátí toto:
$ ^[[24~
Tento výstup lze interpretovat následovně, ^[
je Esc klíč. Když tedy chceme specifikovat tento konkrétní klíč pomocí bind
musíme použít \e
k označení Esc klíč následovaný vším ostatním shora. Takže bind
příkaz vypadá takto:
$ bind '"\e[24~":"....."'
Provedení příkazu uprostřed
Můžete také použít bind -x
nastavit klávesové zkratky, které budou spouštět příkazy, když něco píšete na výzvu, a výstup těchto příkazů se zobrazí, ale cokoli, co jste na výzvu napsali, zůstane nedotčeno.
$ bind -x '"\eW":"..."'
POZNÁMKA: Tato metoda funguje pouze s klávesovými zkratkami, které vydávají 1 znak, takže F12 zde nebude fungovat.
Příklad
Nazvěme klávesovou zkratku Alt + Shift + W .
$ bind -x '"\eW":"who"'
Řekněme, že píšu příkaz finger
:
$ finger
Nyní jsem stiskl klávesovou zkratku 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
Co se děje, je bind
spouští definovaný příkaz, who
, vezme jeho výstup a vloží ho před výzvu. Pokud to zopakujete, uvidíte, co se děje, tady je výstup z toho, že jsem to dvakrát udeřil:
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
Váš problém
Takže jedním nápadem by bylo použít bind -x
výše a cat
k zobrazení tohoto textového souboru na výzvu:
$ bind -x '"\eW":"cat someinfo.txt"'
Nyní, když spustím příkazy, vidím tento soubor takto:
This is text from some
multi-line file reminding
me how to do some
stuff
$ finger
Výstup souboru someinfo.txt
se zobrazuje nad mým finger
příkaz výše.
Odkazy
- Jak v bash připojím funkční klávesu k příkazu?