GNU/Linux >> Znalost Linux >  >> Linux

Jak spustit skript v prostředí Shell, když je stisknuta klávesová zkratka?

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.

Související:Ověření HTLM SelectList pomocí Java Scriptu?

Odkazy

  • Jak v bash připojím funkční klávesu k příkazu?

Linux
  1. Jak zacházet s přepínači ve skriptu Shell?

  2. Jak spustit událost ve skriptu Shell, když je odebráno zařízení USB?

  3. Jak spustit skript Sh ze zástupce na ploše?

  1. Jak spustit skript po ukončení relace xfce

  2. Jak spustit skript shellu při spuštění

  3. Jak spustit kód v prostředí Django pomocí externího skriptu python?

  1. Jak vytvořit dočasný soubor ve skriptu Shell?

  2. Zjistit, zda je klávesa stisknuta ze skriptu?

  3. Jak spustit bash skript?