GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum werden Strg+m und Strg+q nicht in Bash-Shortcuts verwendet?

Kürzlich habe ich die Bash-Tastenkombinationen überprüft und versucht, eine geeignete für meinen tmux-Aktivierungsschlüssel zu finden.

Interessant finde ich das ctrl + m und ctrl + q werden laut https://en.wikipedia.org/wiki/Bash_(Unix_shell).

nicht in Bash-Verknüpfungen verwendet

Warum werden sie nicht verwendet? Ich fühle ctrl + m ist ziemlich praktisch.

Sind diese beiden Kombinationen vom Design her für DIY (define it yourself) vorgesehen Verwendungszweck? Oder gibt es eine andere Geschichte?

Akzeptierte Antwort:

Strg+M sendet dasselbe Zeichen (RET) wie die Eingabetaste im Terminal. Programme können sie nicht unterscheiden, daher können diese Tasten nicht separat konfiguriert werden.

Strg+Q wird standardmäßig bereits für XON verwendet, daher kann es nicht von Bash verwendet werden, aber Sie sollten es trotzdem in tmux verwenden können, da tmux den Raw-Eingabemodus verwendet.

Ein GUI-Programm könnte von der Tastatur lesen, dass die Taste m mit dem Modifikator Strg gedrückt wurde, und Strg+m als Abkürzung verwenden, aber eine Shell oder ein beliebiges Terminalprogramm empfängt die Strg+Tasten-Kombinationen nur als ASCII-Zeichen von 0 bis 26

[email protected] = 0
Ctrl+A = 1
Ctrl+B = 2

und so weiter. Sie können dies versuchen, um die Werte zu sehen

cat ctrlkeys <<EOF
^A^B^C^D^E^F
EOF
od -c ctrlkeys
0000000 001 002 003 004 005 006  n

Um die Werte einzugeben, drücken Sie Strg+v vor Strg+[a-f], um sie uninterpretiert als Rohwert zu erhalten.

Wenn Sie sich die ASCII(7)-Tabelle ansehen, sehen Sie die Steuercodes in einer Tabelle mit den entsprechenden Zeichen @..Z auf der linken Seite. Zum Beispiel

015   13    0D    CR  'r' (carriage ret)     115   77    4D    M

oder

011   9     09    HT  't' (horizontal tab)   111   73    49    I

Die nächste Schicht, die Steuercodes vor Bash interpretiert, ist stty (Ändern und Drucken der Terminaleinstellungen)

stty -a
intr = ^C; quit = ^; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O;

siehe stty(1) für die Bedeutung von lnext oder start und stop .

Siehe auch readline(3), da Bash und andere GNU-CLI-Programme diese Bibliothek verwenden, um Eingabezeilen zu steuern, und natürlich bash(1) /READLINE, den readline-Abschnitt der Bash-Manpage.

Verwandte:Den Wert einer Variablen in Bash in Anführungszeichen setzen oder nicht?

Hinweis:XYZ(NUM) bedeutet Handbuchseite XYZ aus Abschnitt NUM, also das Ergebnis von man NUM XYZ .


Linux
  1. Passwort-Hashing und warum wir es brauchen

  2. Linux – Warum verwenden wir Su – und nicht nur Su?

  3. Bash-Zeilenfortsetzungen nach &&und || Dokumentiert?

  4. Warum kann ich Cd nicht in einem Bash-Skript verwenden?

  5. Warum funktioniert die Regex in Bash nur, wenn es sich um eine Variable handelt und nicht direkt?

Syntax und Beispiele für Bash-Case-Anweisungen

Bash brechen und fortfahren

Bash Exit-Befehl und Exit-Codes

Was ist der Grep-Befehl unter Linux? Warum wird es verwendet und wie funktioniert es?

Warum wird immer noch Unix verwendet, wenn Linux darauf basiert und Linux kostenlos ist?

Warum werden sowohl `make clean` als auch `make mrproper` verwendet?