So führen Sie ein Skript in der Shell aus, wenn eine Tastenkombination gedrückt wird

14

Wie kann ich ein Skript in der Shell ausführen, wenn eine Tastenkombination gedrückt wird?

Ich brauche im Wesentlichen, wenn eine Tastenkombination gedrückt wird, das Skript aus einer Datei lesen und diesen Inhalt im Terminal anzeigen soll.

user3539
quelle
Ich habe die von Ihnen verwendete Methode ausprobiert, bind '"\e[24~":"airmon-ng start wlan0\n"'aber nachdem ich das Terminal geschlossen habe, scheint das Ding zurückgesetzt zu sein und alle Hotkeys sind weg

Antworten:

20

Sie können den eingebauten Befehl verwenden, bindum eine Tastenkombination zuzuordnen, sodass ein Befehls- / Shell-Skript ausgeführt wird.

Beispiel

Angenommen, wir möchten den Befehl ausführen pwd, wenn wir die Taste drückenF12 Taste drücken.

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

Jetzt, wenn ich F12auf meine Aufforderung drücke ,$ :

$ pwd
/home/saml

Festlegen von Tastaturkürzeln

Mit der folgenden Technik können Sie den Escape-Code für eine bestimmte Tastenkombination ermitteln. Auf den meisten Systemen drücken Sie Ctrl+ V, lassen Sie los und drücken Sie dann die Taste, für die Sie den Code möchten. Es gibt einige andere Systeme, mit denen es funktioniertM anstattV

Beispiel

Drücken Sie Ctrl+, lassen Sie Vdann beide Tasten Ctrlund los Vund drücken Sie schließlich F12in einem Terminalfenster, um Folgendes zurückzugeben:

$ ^[[24~

Diese Ausgabe kann wie folgt interpretiert werden, ^[ist der EscSchlüssel. Wenn wir diesen bestimmten Schlüssel mit dem bindBefehl angeben möchten, müssen wir a verwenden \e, um den EscSchlüssel zu kennzeichnen, gefolgt von allem anderen von oben. Der bindBefehl sieht also so aus:

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

Einen Befehl in der Mitte ausführen

Sie können auch bind -xTastenkombinationen einrichten, mit denen Befehle ausgeführt werden, während Sie gerade etwas an der Eingabeaufforderung eingeben. Die Ausgabe dieser Befehle wird angezeigt, aber was auch immer Sie an der Eingabeaufforderung eingegeben haben, bleibt erhalten.

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

HINWEIS: Diese Methode funktioniert nur mit Tastaturkürzeln, die 1 Zeichen ausgeben. Daher F12funktioniert sie hier nicht.

Beispiel

Lassen Sie uns das Tastenkürzel Alt+ Shift+ alias W.

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

Angenommen, ich schreibe den Befehl finger:

$ finger

Nun schlug ich die Tastenkombination 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

Es bindwird der definierte Befehl ausgeführt, whodessen Ausgabe übernommen und vor der Eingabeaufforderung eingefügt. Wenn Sie es wiederholen, werden Sie sehen, was los ist. Hier ist die Ausgabe von mir, die es zweimal trifft:

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

Ihr Problem

Eine Idee wäre daher, die bind -xoben beschriebene Methode zu verwenden und catdiese Textdatei an Ihrer Eingabeaufforderung anzuzeigen:

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

Wenn ich nun Befehle ausführe, kann ich diese Datei folgendermaßen sehen:

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

Die Ausgabe der Datei someinfo.txtwird über meinem fingerBefehl oben angezeigt .

Verweise

slm
quelle
Ich muss nur den Inhalt anzeigen, nicht ausführen.
user3539
Binden Sie sich also an ein Skript, das den Inhalt anzeigt.
Lars Rohrbach
1
Strg + m funktioniert bei mir nicht. Es tut so, als hätte ich gerade die Eingabetaste gedrückt. Eine Alternative, von der ich denke, dass ich ein bash-Neuling bin, besteht darin, echo ' (Leerzeichen nach dem einfachen Anführungszeichen) einzugeben, dann Strg + v zu drücken, dann die gewünschte Taste und dann Leerzeichen, einfaches Anführungszeichen ... wie hier beschrieben . Beispiel:echo ' ^[OD '
aliteralmind