Ich bin auf Bash-Sequenzen wie \033[999D
und gestoßen, \033[2K\r
die verwendet werden, um einen Ausdruck auf einem Terminal zu manipulieren. Aber was bedeuten diese Sequenzen? Wo finde ich eine Liste / Zusammenfassung im Web, um die Bedeutung dieser Sequenzen herauszufinden?
19
Antworten:
Siehe diesen Link http://www.termsys.demon.co.uk/vtansi.htm . Wie Anthon sagt,
\033
ist dies der C-artige Oktalcode für ein Escape-Zeichen. Das[999D
bewegt den Cursor 999 Spalten zurück, was vermutlich ein brachialer Weg ist, um an den Zeilenanfang zu gelangen.[2K
löscht die aktuelle Zeile.\r
ist ein Wagenrücklauf, der den Cursor zum Anfang der aktuellen Zeile zurückbewegt, und ist eher eine Escape-Sequenz im C-Stil als eine Terminal-Steuersequenz.Aktualisieren
Wie bereits erwähnt, haben diese Steuersequenzen nichts mit sich
bash
selbst zu tun , sondern mit dem Endgerät / Emulator, auf dem der Text angezeigt wird. Es war einmal üblich, dass diese Sequenzen von einer völlig anderen Hardware interpretiert wurden. Ursprünglich würde jeder auf völlig unterschiedliche Codesätze reagieren. Zu diesem Zweck wurden dietermcap
undterminfo
-Bibliotheken verwendet, um Code zu schreiben, der mit mehreren Terminals kompatibel ist. Dertput
Befehl ist eine Schnittstelle zurterminfo
Bibliothek (termcap
Unterstützung kann auch kompiliert werden) und bietet eine robustere Möglichkeit, kompatible Sequenzen zu erstellen.Allerdings gibt es auch den ANSI X3.64- oder ECMA-48- Standard. Jede moderne Terminal-Implementierung wird dies nutzen.
terminfo
Sietermcap
sind weiterhin relevant, da die Implementierung möglicherweise unvollständig ist oder nicht standardmäßige Erweiterungen enthält. Für die meisten Zwecke kann jedoch davon ausgegangen werden, dass gängige ANSI-Sequenzen funktionieren.In den
xterm
FAQ finden Sie einige interessante Informationen zu den Unterschieden zwischen modernen Terminalemulatoren (viele versuchen nur, sichxterm
selbst zu emulieren ) und zumxterm
Zusammenhang der Sequenzen mit den im obigen Link genannten VT100-Terminals. Es enthält auch eine endgültige Liste derxterm
Steuersequenzen .Ebenfalls gebräuchlich ist natürlich die Linux-Konsole, in der eine definitive Liste der Steuersequenzen
man console_codes
zusammen mit einem Vergleich zu zu finden istxterm
.quelle
tput
stattdessen Befehle verwenden, um eine größere Portabilität zu erzielen (allerdings auf Kosten einer geringeren Abdeckung der Besonderheiten Ihres Terminals). VT100 (von dem auf dieser Seite die Rede ist) wird von vielen unterstützt (aber ich glaube, es wird nicht alles unterstützt ...). Ihre TERM-Variable kann jedoch auf ein anderes Terminal eingestellt sein, was sich auf die Auswirkungen einiger Befehle auswirken kanntput
ist ein robusterer Weg. Aber es ist eher die ANSI-Kompatibilität als das spezifische VT100-Terminal, das jetzt ziemlich allgegenwärtig ist, obwohl ich mir vorstelle, dass es möglich ist,xterm
in einen Modus zu wechseln, der sie nicht akzeptiert. Ich werde mit ein paar mehr Infos dazu updaten, denke ich.TERM=xterm
, aber implementieren nicht alles, was diesxterm
tut.Dies
\033
ist das Escape-Zeichen, und diese Sequenzen sind nicht bash-spezifisch, sondern werden vom Terminal (Software oder Hardware (über Netzwerk oder serielle Leitung)) interpretiert, in dem das (bash-) Programm ausgeführt wird. Es gibt viele solcher Sequenzen .Was jeder tut, hängt von dem Terminal ab, von dem er abhängig ist, und kann auch von einer vorherigen Sequenz abhängen, die den Status des Terminals ändert.
Diese werden oft verwendet, um Farben in der Bash-Eingabeaufforderung festzulegen , aber ich habe Ihre speziellen Beispiele auf dieser Seite nicht gefunden.
quelle
'\ 033 [999D' ist lustig. Einige Terminals implementieren weniger Escape-Sequenzen, sodass dies möglicherweise erforderlich ist, wenn sich keine von '\ 033 [1G', '\ 033 [1; 1H', '\ 033 [1; 1f' oder '\ r' so verhält wie sie sollte, aber wer verwendet eine tausendspaltige Textanzeige? Diese Sequenzen haben unter Linux eine Manpage: console_codes (4) . bjh21 hat eine detaillierte Liste aller Codes . Je nachdem, welches Programm '\ 033' analysiert, ist möglicherweise die deutlichere Ersetzung '\ e' verfügbar.
Es ist nicht beabsichtigt, dass diese direkt verwendet werden - die richtige Art, Terminal-Steuerbefehle auszugeben, ist mit einer Abstraktionsschicht wie ncurses -, aber sie funktionieren genauso gut mit String-Literalen.
quelle
\033[999D
dies über die vorherigen Zeilen hinausgeht. Kann aber nur das Ergebnis einer zweifelhaften Codierung sein;) Sie könnenbash
die Escape-Codes auch direkt interpretieren, z. B.$'\033[999D'
Sie können nach "033 term escape list" oder " 033 tput " suchen und unter http://wiki.bash-hackers.org/scripting/terminalcodes nach weiteren Informationen suchen, bevor jemand antwortet.]
quelle