Einige Tasten auf Ihrer Tastatur entsprechen nicht den tatsächlichen Zeichen. Entspricht beispielsweise Adem Zeichen, a
aber die Tasten Upund F1haben keine eigenen Zeichen. Wenn diese Sondertasten gedrückt werden, übersetzt das Terminal den Tastendruck in eine spezielle Folge von mehreren Zeichen, die normalerweise mit dem Escape-Zeichen beginnen (normalerweise angezeigt als ^[
) , anstatt ein einzelnes Zeichen zu erhalten, das der Taste entspricht . UpGeneriert beispielsweise normalerweise die Sequenz ^[[A
(das sind 3 Zeichen aus einer Taste: Escape ,, [
und A
).
Der Grund, den Sie normalerweise nicht sehen, ^[[A
ist, dass die meisten Konsolenanwendungen intelligent genug sind, um die speziellen Sequenzen in nützliche Befehle zu übersetzen, anstatt sie nur auf die Konsole zu übertragen. Zu diesem Zweck schalten sie das integrierte Echo des Terminals aus und führen ihre eigene Verarbeitung auf niedrigerer Ebene durch. Wenn Sie beispielsweise bash
sehen ^[[A
, ¹ wird Ihnen klar, dass Sie gedrückt haben, Upund anstatt ^[[A
zurückzuspielen, werden eine ganze Reihe von Aufgaben ausgeführt, um alles zu löschen, was Sie bisher eingegeben haben, den zuvor im Verlauf gespeicherten Befehl abzurufen und diesen stattdessen auszudrucken.
Wenn Sie ^[[A
beim Drücken sehen Up, bedeutet dies normalerweise, dass das Terminal-Echo aktiviert ist und der Vordergrundprozess (derjenige, der das Terminal steuert) keine der oben genannten speziellen Verarbeitungen ausführt. Dies kann daran liegen, dass die Anwendung das Terminal einfach ignoriert (wie die meisten nicht interaktiven Befehle). Beachten Sie, dass die Shell das Terminal normalerweise in den kanonischen Modus versetzt und das Echo aktiviert, bevor ein Vordergrundprozess ausgeführt wird, und seine eigenen Einstellungen wiederherstellt, sobald es nach dem Beenden des Befehls die Kontrolle über das Terminal wiedererlangt.
Das Echo scheint ziemlich harmlos. Denken Sie daran, dass die Zeichen, die Sie über die Tastatur generiert haben, wahrscheinlich in bash
der Eingabewarteschlange landen, wenn der laufende Befehl nicht vom Terminal gelesen wird. Seien Sie also vorsichtig, was Sie eingeben, da sie wahrscheinlich als normale Befehle interpretiert werden, sobald bash
das Lesen fortgesetzt wird vom Terminal.
¹ Dies ist eigentlich eine Vereinfachung. Da die spezifische Reihenfolge je nach Terminaltyp variieren kann, befinden sich normalerweise mehrere Ebenen von Abstraktionsbibliotheken zwischen einer Konsolenanwendung und dem Terminal selbst. Zum Beispiel bash
verwendet die readline
Bibliothek die meisten seiner Eingabe zu tun.