Gibt es eine Handbuchseite für die farbige Shell-Ausgabe?

23

Sie wissen, dass kolorierte Ausgaben durch spezielle Zeichenfolgen erzeugt werden, zum Beispiel:

echo -e "\e[34m Hello\n \e[0m"

Daraufhin wird das blau gefärbte Wort "Hallo" angezeigt. Dazu musste ich im Web suchen, und es ist schwer, weil verschiedene Quellen etwas anderes aussagen können. Ich dachte, dass es Handbücher geben muss, aber ich konnte sie nicht finden. Auch mit apropos coloroder so ähnlich. Die Frage ist also: Wo finde ich zuverlässige Handbücher?

Sergius
quelle
2
Sie suchen nach Dokumentation zu ANSI-Escape-Codes. (Ich benutze
normalerweise
Beachten Sie, dass Sie diese Escape-Sequenzen nicht unbedingt kennen müssen. Einige Shells (mindestens tcsh, zsh, fish) unterstützen die Ausgabe in Farben, ohne dass diese Sequenzen explizit geschrieben werden müssen.
Stéphane Chazelas

Antworten:

27

Es gibt zu viele Informationsquellen, um sie auf dieser Seite aufzulisten:

  • Der Befehl echo -everwendet eine Erweiterung zu machen \eals ASCII - 27 (oktal 33 oder „\ 033“). Die tragbare Methode zum Drucken dieser Anwendungen printf(POSIX). Vergleiche mit Standard echo(POSIX).
  • Ihr Beispiel kann umgeschrieben werden als

    printf "\033[34m Hello\n \033[0m"

  • Der Standard für die Farbverluste ist ECMA-48 (Steuerfunktionen für codierte Zeichensätze).
  • In ECMA-48 listet 8.3.117 SGR - SELECT GRAPHIC RENDITION Steuersequenzen zum Einstellen von 8 Vordergrund- und 8 Hintergrundfarben auf.
  • Außerdem werden die Codes 39/49 "Standardanzeigefarbe (implementierungsdefiniert)" und 38/48 "für zukünftige Standardisierung reserviert; zur Einstellung der Zeichenvordergrundfarbe gemäß ISO 8613-6 [CCITT-Empfehlung T.416]" aufgeführt. Das heißt, es gibt eine Empfehlung einer anderen Organisation, die jedoch (nach 24 Jahren) nicht in den Standard aufgenommen wurde.
  • Wenn Sie es genau lesen, werden Sie feststellen, dass der Standard an vielen Stellen vage ist und unterschiedliche Interpretationen zulässt. Es beschreibt die Syntax dieser Steuersequenzen, beschreibt jedoch nicht ihr Verhalten . Dazu müssen Sie in die Dokumentation der jeweiligen Terminals gehen.
  • Dokumentation zu xterm finden Sie in den XTerm-Steuersequenzen. Dies setzt voraus, dass Sie mit der DEC-Dokumentation auf http://vt100.net vertraut sind
  • Bei anderen Terminals werden die Steuerelemente möglicherweise in den Manualpages aufgeführt (wie bei der Linux-Konsole in console_codes ).
  • andere Terminals dokumentieren sich als "xterm"; Weitere Informationen finden Sie in den häufig gestellten Fragen zu xterm. Vergleichen von Versionen durch Zählen von Steuerelementen . Glücklicherweise sind die Farbsteuerelemente größtenteils kompatibel (siehe jedoch die häufig gestellten Fragen zu ncurses. Mein Terminal zeigt einige ungefärbte Leerzeichen an ).
  • Sie können auch die Handbuchseiten für lesen tput, in denen Sie terminfoFunktionen in einem Shell-Skript verwenden können. Ihr Beispiel könnte umgeschrieben werden als

    printf '%s\n' "$(tput setaf 4)Hello$(tput setaf 0)"
    
  • Einige Quellen wie das Bash Prompt HOWTO und das Advanced Bash-Scripting Guide erwähnen Farbe, aber (auch diese) weisen in der Regel Lücken und Auslassungen auf und sind in Bezug auf ECMA-48 nicht hilfreich.

  • Die meisten anderen Quellen, die Sie mit einer Web-Suche finden, stammen aus anderen Quellen (z. B. den genannten) usw. und berücksichtigen in der Regel den tatsächlichen Standard nur wenig.
Thomas Dickey
quelle
Der relevante Abschnitt in ECMA-48 scheint 8.3.117 - "SGR - SELECT GRAPHIC RENDITION" zu sein. Es wird nur das Wort "blau" erwähnt, und die dort gefundenen Codes funktionieren zumindest in meinem XTerm.
l0b0
ja - ich werde eine Klarstellung hinzufügen.
Thomas Dickey
2
Es ist wirklich eine großartige Antwort - ich wünsche, dass alle Antworten wie Ihre sind
Sergius
1
xterm unterstützt auch den 256-Farben-Modus. Dies ist vermutlich in einem der obigen Handbücher dokumentiert.
sendmoreinfo
Unter wynnnetherland.com/journal/… finden Sie eine Reihe nützlicher Informationen, einschließlich des grc-Pakets, das mit der Befehlsausgabe alle möglichen Kolorierungsschritte ausführen kann.
Joe