Sie können die von einer Taste ausgegebene Zeichenfolge bestimmen, indem Sie Ctrl- vin der Befehlszeile drücken und dann die Taste drücken, an der Sie interessiert sind. Auf meinem System für F12bekomme ich ^[[24~
. Das ^[
repräsentiert Esc. Verschiedene Arten von Terminals oder Terminalemulatoren können unterschiedliche Codes für denselben Schlüssel ausgeben.
An einer Bash-Eingabeaufforderung können Sie einen Befehl wie diesen eingeben, um das Schlüsselmakro zu aktivieren und es auszuprobieren.
bind '"\e[24~":"foobar"'
Wenn Sie jetzt drücken F12, wird in der Befehlszeile "foobar" zur weiteren Bearbeitung angezeigt. Wenn Sie möchten, dass ein Tastendruck sofort einen Befehl eingibt, können Sie eine neue Zeile hinzufügen:
bind '"\e[24~":"pwd\n"'
Wenn Sie jetzt drücken F12, wird das aktuelle Verzeichnis angezeigt, ohne drücken zu müssen Enter. Was ist, wenn Sie bereits etwas in die Zeile eingegeben haben und dieses verwenden, das automatisch ausgeführt wird? Es könnte chaotisch werden. Sie können die Zeile jedoch als Teil Ihres Makros löschen:
bind '"\e[24~":"\C-k \C-upwd\n"'
Das Leerzeichen stellt sicher, dass das Ctrl- uetwas zu löschen hat, damit die Glocke nicht läutet.
Sobald das Makro wie gewünscht funktioniert, können Sie es dauerhaft machen, indem Sie es Ihrer ~/.inputrc
Datei hinzufügen . Der bind
Befehl oder die äußeren einfachen Anführungszeichen sind nicht erforderlich :
"\e[24~":"\C-k \C-upwd\n"
Bearbeiten:
Sie können auch eine Schlüsselbindung erstellen, die etwas ausführt, ohne die aktuelle Befehlszeile zu stören.
bind -x '"\eW":"who"'
Während Sie dann einen Befehl eingeben, für den beispielsweise ein Benutzername erforderlich ist, und die Namen der angemeldeten Benutzer kennen müssen, können Sie Alt- Shift- drücken. WDie Ausgabe von who
wird angezeigt und die Eingabeaufforderung wird erneut ausgegeben mit intaktem Teilbefehl und dem Cursor an der gleichen Position in der Zeile.
Leider funktioniert dies nicht richtig für Tasten, F12die mehr als zwei Zeichen ausgeben. In einigen Fällen kann dies umgangen werden.
Der Befehl ( who
in diesem Fall) kann eine beliebige ausführbare Datei sein - ein Programm, ein Skript oder eine Funktion.