Dies sind Zeichenfolgen, die von Ihrem Terminal gesendet werden, wenn Sie eine bestimmte Taste drücken. Es hat nichts mit Bash oder Readline per se zu tun, aber Sie möchten wissen, welche Zeichenfolge eine bestimmte Taste oder Tastenkombination sendet, wenn Sie konfigurieren möchten, dass readline
bei einem bestimmten Tastendruck etwas ausgeführt wird.
Wenn Sie die ATaste drücken, senden Terminals in der Regel das a
Zeichen (0x61). Wenn Sie <Ctrl-I>
oder drücken <Tab>
, senden Sie in der Regel das ^I
Zeichen TAB
oder \t
(0x9). Die meisten Funktions- und Navigationstasten senden im Allgemeinen eine Folge von Zeichen, die mit ^[
(control- [) ESC
oder \e
(0x1b, 033 octal) beginnt. Die genaue Folge variiert jedoch von Terminal zu Terminal.
Der beste Weg, um herauszufinden, was eine Taste oder Tastenkombination für Ihr Terminal sendet, ist, sie auszuführen sed -n l
und anschließend Enterauf der Tastatur einzugeben. Dann sehen Sie etwas wie:
$ sed -n l
^[[1;5A
\033[1;5A$
Die erste Zeile wird durch das lokale Terminal verursacht, das echo
vom Endgerät ausgeführt wird (dies ist möglicherweise nicht zuverlässig, da sich die Einstellungen des Endgeräts darauf auswirken würden).
Die zweite Zeile wird von ausgegeben sed
. Das $
soll nicht enthalten sein, es soll nur zeigen, wo das Ende der Zeile ist.
Oberhalb Das bedeutet , dass Ctrl-Up(was ich gedrückt habe) senden und die sechs Zeichen ESC
, [
, 1
, ;
, 5
und A
(0x1b 0x5b 0x31 0x3b 0x35 0x41)
Die terminfo
Datenbank zeichnet eine Anzahl von Sequenzen für eine Anzahl von gemeinsamen Schlüsseln für eine Anzahl von Terminals auf (basierend auf dem $TERM
Wert).
Zum Beispiel:
TERM=rxvt tput kdch1 | sed -n l
Würde Ihnen sagen, welche Escape-Sequenz rxvt
beim Drücken der DeleteTaste gesendet wird.
Sie können mit infocmp
(hier unter der Annahme von ncurses
infocmp) nachsehen, welche Taste einer bestimmten Sequenz mit Ihrem aktuellen Terminal entspricht:
$ infocmp -L1 | grep -F '=\E[Z'
back_tab=\E[Z,
key_btab=\E[Z,
Tastenkombinationen wie Ctrl-Uphaben keine entsprechenden Einträge in der terminfo
Datenbank. Um herauszufinden, was sie senden, lesen Sie entweder die Quelle oder die Dokumentation für das entsprechende Terminal oder probieren Sie es mit der sed -n l
oben beschriebenen Methode aus.
bind -p
.