In den .*rc
Dateien von Personen, die ich online oder in verschiedenen Codes sehe, sehe ich häufig viele Personen, die ANSI-Escape-Sequenzen manuell verwenden, anstatt sie zu verwenden tput
.
Ich hatte das Verständnis, tput
das universeller / sicherer ist, daher wundere ich mich:
Gibt es einen objektiven Grund, warum man Escape-Sequenzen anstelle von verwenden sollte tput
? (Portabilität, Robustheit bei Fehlern, ungewöhnliche Terminals ...?)
terminal
escape-characters
tput
Captain Man
quelle
quelle
printf
und ANSI-Escape-Sequenzen,tput
schlägt jedoch fehl (zumindest auf meiner Box).Antworten:
tput
kann Ausdrücke (zum Beispiel insgr
undsetaf
) verarbeiten, die der typische Shell-Scripter weniger als verwendbar finden würde. Um eine Vorstellung davon zu bekommen, worum es geht, sehen Sie sich die Ausgabeinfocmp
mit der-f
angewendeten Option (Formatierung) an. Hier ist eines der Beispiele für die Verwendung dieser Zeichenfolgen aus den Terminfo-Beschreibungen von xterm :Die Formatierung teilt die Dinge auf - ein Skript oder Programm, um dasselbe zu tun, müsste diesen Drehungen und Wendungen folgen. Die meisten Leute geben auf und benutzen nur die einfachsten Saiten.
Die 16-Farben-Funktion wurde von IBM aixterm ausgeliehen, das jeweils 16 Codes für Vordergrund und Hintergrund auf zwei Bereiche abbildet.
Ein einfaches Skript
und Ausgabe zeigen, wie es funktioniert:
Die Zahlen werden aufgeteilt, da aixterm die Bereiche 30-37 und 40-47 verwendet, um mit den ECMA-48-Farben (auch als "ANSI" bezeichnet) übereinzustimmen, und den Bereich 90-107 für Codes verwendet, die nicht in der Norm definiert sind.
Hier ist ein Screenshot mit xterm using
TERM=xterm-16color
, in dem Sie den Effekt sehen können.Weiterführende Literatur:
infocmp
- Terminfo-Beschreibungen vergleichen oder ausdruckentput
,reset
- Terminal initialisieren oder terminfo-Datenbank abfragenaixterm
Befehlquelle
Aus einer Zeit, in der auf UNIX-Plattformen eine Vielzahl von Geräten angeschlossen sein könnten, bevorzuge ich tput und seine Freunde gegenüber wörtlichen Escape-Sequenzen.
Ich glaube , der wahre Grund ist , dass die meisten Menschen einfach nicht über sie wissen
tput
und die dazugehörigenterminfo
/termcap
Dateien und Bibliotheken.quelle
Einer der Gründe ist, dass
tput
der externe Befehl langsamer ausgeführt werden kann als die integrierten Shell-Escape-Codes. Eine andere Sache ist, dass man leicht einen Liner erstellen kann, der ANSI-Escape-Codes mit Shell-spezifischen Escape-Zeichen kombiniert, wie zum Beispiel in derbash
Eingabeaufforderung:ähnlich in
zsh
:Hier ist alles klar und kompakt. Mit
tput
einem müsste man es in mehrere Zeilen aufteilen oder es viel länger und komplexer machen,tput
mehrmals ausführen usw.quelle
PS1="$(tput setaf 2)\u@\h$(tput reset) >
$(tput sgr0)
für das Ende, aber zuzustimmen, dass tput eine Verbesserung ist.