Wenn ich die Bash-Shell-CLI verwende und ein Programm ausführe, das nicht sofort zurückkehrt, gebe ich einige Buchstaben ein (im Grunde tippe ich den nächsten Befehl, bevor ich bemerke, dass der vorherige nicht beendet wurde) und die Eingabe sieht immer ungefähr so aus (besonders bei Verwendung Pfeiltasten nach oben und unten :)
]]A^ or ]]B^
Und ich frage mich, ist diese Art der vorzeitigen Eingabe überhaupt "schädlich", oder was bedeutet die zurückgegebene Zeichenfolge?
Antworten:
Diese Zeichenfolgen sind die Rohdarstellung der von Ihnen eingegebenen Sonderzeichen (wie Home, End, Pfeile, Tabulatoren usw.).
Ihre schädliche Wirkung wird durch den von Ihnen ausgeführten Befehl gesteuert. Wenn er Eingaben vom Terminal empfängt, sind diese Zeichen Teil seiner Eingabe.
Wenn keine Eingabe vom Terminal erfolgt, sollte dies keine nachteiligen Auswirkungen auf die mir bekannten Unix-Varianten haben.
quelle
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 ,,[
undA
).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 beispielsweisebash
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, sobaldbash
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 diereadline
Bibliothek die meisten seiner Eingabe zu tun.quelle