GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Sind die Terminal-Farb-Escape-Sequenzen irgendwo für Bash definiert?

Ich habe ab und zu Farben in Bash-Skripten verwendet (hauptsächlich auf CentOS), aber um ihre Verwendung bequemer zu gestalten, definiere ich sie neu Variablen zum Einfärben von Werten:

local GRAY="\[\033[1;30m\]"
local LIGHT_GRAY="\[\033[0;37m\]"
local CYAN="\[\033[0;36m\]"
local LIGHT_CYAN="\[\033[1;36m\]"
local NO_COLOUR="\[\033[0m\]"

oder auch mit tput :

bold=`tput bold`
normal=`tput sgr0`
whitef=`tput setaf 7`
greenf=`tput setaf 2`
redb=`tput setab 1`

Ich habe mich in /etc/rc.d/init.d umgesehen Verzeichnis, aber ich habe darin nichts bezüglich Farbdefinitionen gefunden.

Gibt es eine solche Definition bereits? Wenn nicht, würde ich sie in eine Datei in /etc/rc.d/init.d einfügen zum Beispiel, und habe es in meine Skripte aufgenommen, ein bisschen wie mit /etc/rc.d/init.d/functions

Akzeptierte Antwort:

Bei Ihrer Frage spielen mehrere Aspekte eine Rolle.

Erstens definiert bash keine Farben. Tatsächlich hat bash absolut keine Ahnung, dass Farben überhaupt existieren. Es weiß nur, dass Sie ihm gesagt haben, dass es die Zeichen \033[0;36m ausgeben soll . Ihr Terminal-Emulator (xterm, gnome-terminal, was auch immer) empfängt diese Zeichen und versteht „Ich muss mit der Ausgabe in Cyan beginnen“.

Somit ist es Ihr Terminal-Emulator, der Farben versteht. Ihr Terminal-Emulator versteht, dass \033[0;36m ist Cyan, aber ein anderer Terminal-Emulator verwendet möglicherweise einen völlig anderen Zeichensatz für Cyan (obwohl kein vernünftiger Terminal-Emulator den Standard zur Schau stellen und dies tun würde). Das ist der Grund für tput . Wenn Sie tput setaf 6 ausführen , tput wird die Escape-Codes Ihres Terminals für die Farbe 6 (Cyan) nachschlagen und diesen Escape-Code ausgeben.

Nun zurück zum bash. Wie Sie vielleicht bemerkt haben, habe ich, wenn ich mich auf die Farbe Cyan beziehe, \033[0;36m verwendet , nicht \[\033[0;36m\] . Die eckigen Klammern haben gefehlt. Der Zweck der eckigen Klammern besteht darin, dass Bash bei der Verwendung von Escape-Codes (Farben) in der Eingabeaufforderung wissen muss, welche Zeichen nicht gedruckt werden (Breite Null, zeigen eigentlich nichts). Damit schließen Sie nicht druckbare Zeichen in \[ ein \] . Wenn Sie diese Zeichen entfernen, scheint zunächst alles gut zu funktionieren, aber Sie werden auf alle möglichen Verrücktheiten stoßen, wenn Ihr Befehl die Terminalbreite überschreitet. Dies liegt daran, dass bash beim Tippen wissen muss, wann der Befehl in die nächste Zeile umbrechen soll. Dazu berechnet es die Breite der Eingabeaufforderung und dann die Breite Ihrer Eingabe.

Noch eine Anmerkung zu tput . CYAN="\[\033[0;36m\]" ist nicht dasselbe wie CYAN="$(tput setaf 6)" . Wie wir gerade besprochen haben, sind die eckigen Klammern für bash und tput relevant wird nur die Terminal-Escape-Codes ausgeben.

Siehe auch:Linux – Ist Linux ein Unix?

Da eckige Klammern normalerweise nur in der Eingabeaufforderung relevant sind, sollten Sie sie nicht verwenden, wenn Sie Farben in der Ausgabe eines Skripts oder ähnlichem verwenden. Das heißt, wenn Sie Farben für mehr als nur Eingabeaufforderungen verwenden, müssen Sie mehrere Variablen definieren. Eine mit eckigen Klammern für die Verwendung in der Eingabeaufforderung und eine ohne für alles andere. Sie könnten die eckigen Klammern jedoch jedes Mal manuell hinzufügen, wenn Sie in der Eingabeaufforderung auf eine Farbe verweisen.

Um es kurz zu machen, Sie möchten wahrscheinlich so etwas definieren wie:

local CYAN="$(tput setaf 6)" # OR CYAN="\033[0;36m"
local LIGHT_CYAN="$CYAN$(tput bold)" # OR LIGHT_CYAN="\033[1;36m"
local PROMPT_CYAN="\[$CYAN\]"
local PROMPT_LIGHT_CYAN="\[$LIGHT_CYAN\]"

Linux
  1. Eine Anleitung zum Linux-Terminal für Anfänger

  2. Bash-Tipps für den Alltag an der Kommandozeile

  3. Ssh – Stellen Sie die Terminalfarben des lokalen Computers so ein, dass sie die Farben des Computers verwenden, auf den ich ssh?

  4. Was sind die Worttrennzeichen von Readline?

  5. Tput:Kein Wert für $term und kein -t angegeben?

20 Produktivitätstools für das Linux-Terminal

Eine Einführung in den Terminalemulator DomTerm für Linux

Ny objektiver Vorteil, um Sequenzen über Tput zu entkommen?

Die Bash FOR-Schleife erklärt und vereinfacht

3 Musik-Mediaplayer für das Debian 10 Terminal

Die 30 besten Linux-Terminalemulatoren und Bash-Editoren