Wie kann ich herausfinden, welche Escape-Codes mein Terminal für bestimmte spezielle Codes sendet, die von cat nicht angezeigt werden?

Wie kann ich herausfinden, welche Escape-Codes mein Terminal für bestimmte spezielle Codes sendet, die von cat nicht angezeigt werden?

Ich wollte herausfinden, was mein Terminal für Strg+Rücktaste und Alt+Rücktaste sendet. Die Standardmethode hierfür ist die Ausführung catauf dem Terminal, und das Eintippen von Daten funktioniert normalerweise, aber bei bestimmten Ausgaben wie diesen sind die Ergebnisse knifflig.

Ich vermute, dass Alt+Backspace sendet \x1b\x7f(also die Rücktaste entkommt), aber was passiert, wenn ich laufe catund Strg+V und Alt+Backspace oder nur Alt+Backspace eingebe, ist, dass das Escape „eingetippt“ und dann sofort mit der Rücktaste entfernt wird, sodass es so aussieht, als ob nichts passiert. Ich habe das nur einmal bemerkt, als ich sah, wie mein Computer ein einzelnes Bild des ^[Escape renderte.

Bisher bin ich mir nicht sicher, wie ich herausfinden soll, was Strg+Rücktaste sendet. Es ist nicht Strg+W, obwohl beide in der Bash-Eingabeaufforderung ein Wort löschen, weil darunter catnichts passiert, während Strg+W ein Wort löscht!

Antwort1

Verwenden Sie einfach diesen Befehl:

showkey -a

Antwort2

In zsh, mit:

$ STTY='raw -echo min 0 time 40' cat -vte
^[^?

Oder mit bash:

$ s=$(stty -g); stty raw -echo min 0 time 40; cat -vte; stty "$s"
^[^?

Sie sehen die Rohdaten der Terminaleingabe, wie sie gesendet und gerendert wird cat -vte. Geben Sie 4 Sekunden (40 Dezisekunden) lang nichts ein, um anzuhalten.

Sie können es cat -vtedurch ersetzen od -An -w1 -tu1 -tx1 -to1 -ta(vorausgesetzt GNU ododer kompatibel), um beispielsweise jeden Bytewert dezimal, hexadezimal, oktal oder als Zeichen anzuzeigen.

  27
  1b
 033
 esc
 127
  7f
 177
 del

Antwort3

Ich habe anderswo einen Trick gefunden, um ein einzelnes Zeichen in Bash anzuzeigen, indem ich verwendet habe read -rsn1 key && echo "$key" | xxd. Damit war ich zu 90 % am Ziel, aber ich blieb eine Weile hängen, weil ich nur 0x1b (Escape) zurückbekam, was nicht das vollständige Bild war.

Dann habe ich es geändert in read -rsn2 key && echo "$key" | xxdund das skaliert auf die Anzahl der Zeichen, die Ihre Escape-Sequenz zufällig hat, ein bisschen Experimentieren reicht aus. Auf meinem Terminal hatte ich alsobeideStrg+ und Alt+Backspace wurden in der Vergangenheit aus praktischen Gründen 0x1b, 0x7f (Meta-Backspace, wenn Sie so wollen) zugeordnet. Ich gehe diesen Weg in erster Linie, weil ich einen neuen Terminalemulator so konfigurieren möchte, dass ich mit beiden Kombinationen Wörter löschen kann, aber nur eine davon funktioniert. Das read -rsnin Bash ist ein gutes Tool für ein niedrigeres Ausgabe-Debugging als cat.

verwandte Informationen