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 readlinebei einem bestimmten Tastendruck etwas ausgeführt wird.
Wenn Sie die ATaste drücken, senden Terminals in der Regel das aZeichen (0x61). Wenn Sie <Ctrl-I>oder drücken <Tab>, senden Sie in der Regel das ^IZeichen TABoder \t(0x9). Die meisten Funktions- und Navigationstasten senden im Allgemeinen eine Folge von Zeichen, die mit ^[(control- [) ESCoder \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 lund 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 echovom 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, ;, 5und A(0x1b 0x5b 0x31 0x3b 0x35 0x41)
Die terminfoDatenbank zeichnet eine Anzahl von Sequenzen für eine Anzahl von gemeinsamen Schlüsseln für eine Anzahl von Terminals auf (basierend auf dem $TERMWert).
Zum Beispiel:
TERM=rxvt tput kdch1 | sed -n l
Würde Ihnen sagen, welche Escape-Sequenz rxvtbeim Drücken der DeleteTaste gesendet wird.
Sie können mit infocmp(hier unter der Annahme von ncursesinfocmp) 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 terminfoDatenbank. 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 loben beschriebenen Methode aus.
bind -p.