Wie könnte ich ein Skript in der Shell ausführen, wenn eine Tastenkombination gedrückt wird.
Was ich im Wesentlichen brauche, ist, wenn eine Tastenkombination gedrückt wird, sollte das Skript aus einer Datei lesen und diesen Inhalt im Terminal anzeigen.
Akzeptierte Antwort:
Sie können den eingebauten Befehl bind
verwenden um eine Tastenkombination so zuzuordnen, dass sie ein Befehls-/Shell-Skript ausführt.
Beispiel
Angenommen, wir möchten den Befehl pwd
ausführen , wenn wir F12 drücken Schlüssel.
$ bind '"\e[24~":"pwd\n"'
Wenn ich jetzt F12 drücke an meiner Eingabeaufforderung $
:
$ pwd
/home/saml
Festlegen von Tastaturkürzeln
Sie können die folgende Technik verwenden, um den Escape-Code für eine bestimmte Tastenkombination zu ermitteln. Auf den meisten Systemen drücken Sie Strg + V , loslassen und dann die Taste drücken, für die Sie den Code haben möchten. Es gibt einige andere Systeme, die mit M funktionieren statt V
Beispiel
Drücken Sie Strg + V Lassen Sie dann beide Strg los und V und abschließend F12 drücken in einem Terminalfenster gibt Folgendes zurück:
$ ^[[24~
Diese Ausgabe kann wie folgt interpretiert werden:^[
ist das Esc Schlüssel. Wenn wir also diesen bestimmten Schlüssel mit bind
angeben möchten Befehl müssen wir einen \e
verwenden um das Esc zu bezeichnen Schlüssel gefolgt von allem anderen von oben. Also das bind
Befehl sieht so aus:
$ bind '"\e[24~":"....."'
Ausführen eines Befehls in der Mitte
Sie können auch bind -x
verwenden um Tastenkombinationen einzurichten, die Befehle ausführen, während Sie gerade etwas an der Eingabeaufforderung eingeben, und die Ausgabe dieser Befehle wird angezeigt, aber was auch immer Sie an der Eingabeaufforderung eingegeben haben, bleibt intakt.
$ bind -x '"\eW":"..."'
HINWEIS: Diese Methode funktioniert nur mit Tastaturkürzeln, die 1 Zeichen ausgeben, also F12 funktioniert hier nicht.
Beispiel
Lassen Sie uns die Tastenkombination Alt aliasieren + Shift + W .
$ bind -x '"\eW":"who"'
Angenommen, ich gebe den Befehl finger
ein :
$ finger
Jetzt drücke 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
Was los ist, ist bind
führt den definierten Befehl who
aus , nimmt seine Ausgabe und fügt sie vor der Eingabeaufforderung ein. Wenn Sie es wiederholen, werden Sie sehen, was los ist, hier ist die Ausgabe von mir, wie ich es 2 Mal drücke:
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 also, den bind -x
zu verwenden obige Methode und cat
um diese Textdatei bei Ihrer Eingabeaufforderung anzuzeigen:
$ bind -x '"\eW":"cat someinfo.txt"'
Wenn ich jetzt Befehle ausführe, kann ich diese Datei wie folgt sehen:
This is text from some
multi-line file reminding
me how to do some
stuff
$ finger
Die Ausgabe der Datei someinfo.txt
wird über meinem finger
angezeigt Befehl oben.
Referenzen
- Wie binde ich in Bash eine Funktionstaste an einen Befehl?