Farbe in der Konsole: Unterschied zwischen den Versionen
Yehudi (Diskussion | Beiträge) |
Robi (Diskussion | Beiträge) |
||
Zeile 1: | Zeile 1: | ||
− | [http://www.linux-club.de/viewtopic.php?t=15252 | + | == Farbe in der Konsole == |
+ | |||
+ | ; Vorbemerkung : | ||
+ | hin und wieder möchte man auch auf einem Textterminal etwas Hervorheben oder farbig markieren. Das das so etwas geht, hat wohl jeder schon einmal erlebt, nachdem er zB '''mc''' gestartet hat oder bei der Ausgabe von '''ls''' sich über die bunten Dateinamen gewundert hat. | ||
+ | |||
+ | * Auf einem Textterminal ist eine farbige Anzeige mittels '''ANSII Escape Sequence''' möglich | ||
+ | * Nicht alle Terminaleinstellungen unterstützen dieses | ||
+ | * Welchen Terminaltype man derzeit benutzen, ist in der TERM Variable hinterlegt. '''echo $TERM''' | ||
+ | * Eine Übersicht welche TERM Einstellungen farbige Ausgaben unterstützen finden wir in der Datei /etc/DIR_COLORS | ||
+ | |||
+ | |||
+ | === die ANSII Escape Sequence für farbige Darstellung === | ||
+ | |||
+ | ; das Prinzip der Escape Sequence für farbige Ausgabe : | ||
+ | ist folgendes Format '''\033[BC;TA;TCm''' | ||
+ | |||
+ | dabei gilt im Einzelnen | ||
+ | * '''Eröffnung der Sequence''' ist immer '''\033[''' oder etwas abgkürzt '''\e[''' | ||
+ | |||
+ | * '''BC der Code für die Hintergrundfarbe''' | ||
+ | ::: Dieser Code muss nicht zwingend angegeben werden | ||
+ | ::: Hintergrund color codes | ||
+ | :::: 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white | ||
+ | |||
+ | * '''TA der Code für ein Textattribut''' | ||
+ | :::Text Attribute codes | ||
+ | :::: 00=keine 01=fett 04=unterstrichen 05=blinken 07=reverse 08=unsichtbar | ||
+ | |||
+ | * '''TC der Code für die Textfarbe''' | ||
+ | :::Text color codes | ||
+ | :::: 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white | ||
+ | |||
+ | * ''die einzelnen Codes werden mit Semikolon ohne zusätzliche Leerzeichen getrennt'' | ||
+ | |||
+ | * '''den Abschluss''' bildet ein '''m''' | ||
+ | |||
+ | |||
+ | in Verbindung mit dem Text Attribut 00 oder 01 ergeben sich folgende Textfarben | ||
+ | <pre> | ||
+ | Black 0;30 Dark Gray 1;30 | ||
+ | Blue 0;34 Light Blue 1;34 | ||
+ | Green 0;32 Light Green 1;32 | ||
+ | Cyan 0;36 Light Cyan 1;36 | ||
+ | Red 0;31 Light Red 1;31 | ||
+ | Purple 0;35 Light Purple 1;35 | ||
+ | Brown 0;33 Yellow 1;33 | ||
+ | Light Gray 0;37 White 1;37 | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | |||
+ | ==== Beispiel für farbige Ausgaben ==== | ||
+ | |||
+ | <pre> | ||
+ | echo -e "\033[46;1;31m TESTAUSGABE \033[43;4;34m KUNTER \033[45;1;32m BUNT \033[44;1;33m ANGESTRICHEN \033[0m" | ||
+ | </pre> | ||
+ | Am Ende sollte möglichst immer '''\033[0m''' anbinden, damit die nachfolgende Ausgabe dann wieder "normal" ist. | ||
+ | |||
+ | |||
+ | ==== Script um eine Farbübersicht zu erhalten ==== | ||
+ | |||
+ | Eine Übersicht welche Farben wie auf welcher Hintergrundfarbe wirkt, kann man mit diesem kleinem Script hier erzeugen | ||
+ | [[http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html Fundort]] | ||
+ | |||
+ | <pre> | ||
+ | #!/bin/bash | ||
+ | # | ||
+ | # This file echoes a bunch of color codes to the | ||
+ | # terminal to demonstrate what's available. Each | ||
+ | # line is the color code of one forground color, | ||
+ | # out of 17 (default + 16 escapes), followed by a | ||
+ | # test use of that color on all nine background | ||
+ | # colors (default + 8 escapes). | ||
+ | # | ||
+ | |||
+ | T='gYw' # The test text | ||
+ | |||
+ | echo -e "\n 40m 41m 42m 43m\ | ||
+ | 44m 45m 46m 47m"; | ||
+ | |||
+ | for FGs in ' m' ' 1m' ' 30m' '1;30m' ' 31m' '1;31m' ' 32m' \ | ||
+ | '1;32m' ' 33m' '1;33m' ' 34m' '1;34m' ' 35m' '1;35m' \ | ||
+ | ' 36m' '1;36m' ' 37m' '1;37m'; | ||
+ | do FG=${FGs// /} | ||
+ | echo -en " $FGs \033[$FG $T " | ||
+ | for BG in 40m 41m 42m 43m 44m 45m 46m 47m; | ||
+ | do echo -en "$EINS \033[$FG\033[$BG $T \033[0m"; | ||
+ | done | ||
+ | echo; | ||
+ | done | ||
+ | echo | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | === Anwendung im Shell Prompt === | ||
+ | |||
+ | ==== farbiges Prompt ==== | ||
+ | |||
+ | Die Shellvariable PS1 steuert das Verhalten des Prompts. | ||
+ | Du kannst folgendes in deine .bashrc (in deinem Homeverzeichnis) schreiben: | ||
+ | |||
+ | <pre> | ||
+ | if test \( "$TERM" = "xterm" -o "${TERM#screen}" != "$TERM" \) -a -z "$EMACS" | ||
+ | then | ||
+ | export PS1="\[\033[31m\]\[\e]2;\u@\h:\w\007\e]1;\h\007\]\u@\h:\w> \[\033[0m\]" | ||
+ | else | ||
+ | export PS1="\[\033[31m\]\u@\h:\w> \[\033[0m\]" | ||
+ | fi | ||
+ | </pre> | ||
+ | |||
+ | Dann die Datei neu einlesen oder eine neue Bash eröffnen damit die Änderung wirkt<br/> | ||
+ | es genügt '''.bashrc''' im Homeverzeichnis abzusetzen | ||
+ | |||
+ | Danach solltest du einen roten Prompt haben. | ||
+ | |||
+ | |||
+ | |||
+ | ==== farbigen Errorlevel im Prompt ==== | ||
+ | |||
+ | Errorlevel in rot anzeigen ''(Danke an reini123)'' | ||
+ | |||
+ | folgenden Code in der aktuellen Bash ausführen oder für dauerhaften Gebrauch in der ~/.bashrc ablegen | ||
+ | <pre> | ||
+ | PROMPT_COMMAND='LASTERROR="[$?]" ; test "$LASTERROR" = "[0]" || echo -ne "\033[93;41m${LASTERROR}\033[0m"' | ||
+ | export PROMPT_COMMAND | ||
+ | </pre> | ||
+ | |||
+ | Jetzt wird der Rückgabe Wert eines Befehles oder Scriptes insofern er nicht '''0''' ist, innerhalb des folgenden Prompt farbig angezeigt, das kann sehr hilfreich sein zB für das Schreiben und Testen von Befehlsketten oder Scripte. | ||
+ | |||
+ | ==== Links zum Thema Prompt ==== | ||
+ | * [[http://www.tldp.org/linuxfocus/common/sart/index.html#2000-02-14%3A5 Colors in the command prompt]] | ||
+ | * [[http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/index.html Bash-Prompt]] | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | === Anwendungen innerhalb des ls Befehles === | ||
+ | |||
+ | Der ls Befehl kann Dateientypen an Dateiattributen und Prefixen erkenne und farbig darstellen. | ||
+ | |||
+ | |||
+ | siehe dazu auch [[http://www.die.net/doc/linux/man/man1/ls.1.html man ls]] <br/> | ||
+ | verantwortlich für das Einschalten dieser Funktion ist die Option '''--color''' | ||
+ | |||
+ | Die Zuordnung der Farben zu den Dateitypen wird global für alle in der '''/etc/DIR_COLORS''' vorgenommen. | ||
+ | Jedem User sollte es aber möglich sein diese Datei in sein Homeverzeichnis unter dem Namen '''.dir_colors''' zu kopieren, dann kann er seinen Bedürfnissen und Vorlieben entsprechend, selbst seine persönlichen Einstellungen durch änderen dieser Datei vornehmen. | ||
+ | |||
+ | <pre> | ||
+ | cp /etc/DIR_COLORS ~/.dir_colors | ||
+ | </pre> | ||
+ | |||
+ | danach einfach die bash neu starten, damit die Änderungen wirken. | ||
+ | |||
+ | mehr infos mit '''man DIR_COLORS''' | ||
+ | |||
+ | ==== Links zum Thema ls und Color ==== | ||
+ | |||
+ | * [[http://www.linux-user.de/ausgabe/2001/12/092-zubefehl/ls-3.html ls Bitte in bunt]] | ||
+ | |||
+ | |||
+ | <!-- überarbeitet und zusammengefasst von robi 01.09.2006--> | ||
+ | <!-- Orginal http://www.linux-club.de/viewtopic.php?t=15252--> | ||
+ | |||
+ | |||
+ | [[Category:Konsole]] |
Version vom 1. September 2006, 18:49 Uhr
Inhaltsverzeichnis
Farbe in der Konsole
- Vorbemerkung
hin und wieder möchte man auch auf einem Textterminal etwas Hervorheben oder farbig markieren. Das das so etwas geht, hat wohl jeder schon einmal erlebt, nachdem er zB mc gestartet hat oder bei der Ausgabe von ls sich über die bunten Dateinamen gewundert hat.
- Auf einem Textterminal ist eine farbige Anzeige mittels ANSII Escape Sequence möglich
- Nicht alle Terminaleinstellungen unterstützen dieses
- Welchen Terminaltype man derzeit benutzen, ist in der TERM Variable hinterlegt. echo $TERM
- Eine Übersicht welche TERM Einstellungen farbige Ausgaben unterstützen finden wir in der Datei /etc/DIR_COLORS
die ANSII Escape Sequence für farbige Darstellung
- das Prinzip der Escape Sequence für farbige Ausgabe
ist folgendes Format \033[BC;TA;TCm
dabei gilt im Einzelnen
- Eröffnung der Sequence ist immer \033[ oder etwas abgkürzt \e[
- BC der Code für die Hintergrundfarbe
- Dieser Code muss nicht zwingend angegeben werden
- Hintergrund color codes
- 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white
- TA der Code für ein Textattribut
- Text Attribute codes
- 00=keine 01=fett 04=unterstrichen 05=blinken 07=reverse 08=unsichtbar
- Text Attribute codes
- TC der Code für die Textfarbe
- Text color codes
- 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white
- Text color codes
- die einzelnen Codes werden mit Semikolon ohne zusätzliche Leerzeichen getrennt
- den Abschluss bildet ein m
in Verbindung mit dem Text Attribut 00 oder 01 ergeben sich folgende Textfarben
Black 0;30 Dark Gray 1;30 Blue 0;34 Light Blue 1;34 Green 0;32 Light Green 1;32 Cyan 0;36 Light Cyan 1;36 Red 0;31 Light Red 1;31 Purple 0;35 Light Purple 1;35 Brown 0;33 Yellow 1;33 Light Gray 0;37 White 1;37
Beispiel für farbige Ausgaben
echo -e "\033[46;1;31m TESTAUSGABE \033[43;4;34m KUNTER \033[45;1;32m BUNT \033[44;1;33m ANGESTRICHEN \033[0m"
Am Ende sollte möglichst immer \033[0m anbinden, damit die nachfolgende Ausgabe dann wieder "normal" ist.
Script um eine Farbübersicht zu erhalten
Eine Übersicht welche Farben wie auf welcher Hintergrundfarbe wirkt, kann man mit diesem kleinem Script hier erzeugen [Fundort]
#!/bin/bash # # This file echoes a bunch of color codes to the # terminal to demonstrate what's available. Each # line is the color code of one forground color, # out of 17 (default + 16 escapes), followed by a # test use of that color on all nine background # colors (default + 8 escapes). # T='gYw' # The test text echo -e "\n 40m 41m 42m 43m\ 44m 45m 46m 47m"; for FGs in ' m' ' 1m' ' 30m' '1;30m' ' 31m' '1;31m' ' 32m' \ '1;32m' ' 33m' '1;33m' ' 34m' '1;34m' ' 35m' '1;35m' \ ' 36m' '1;36m' ' 37m' '1;37m'; do FG=${FGs// /} echo -en " $FGs \033[$FG $T " for BG in 40m 41m 42m 43m 44m 45m 46m 47m; do echo -en "$EINS \033[$FG\033[$BG $T \033[0m"; done echo; done echo
Anwendung im Shell Prompt
farbiges Prompt
Die Shellvariable PS1 steuert das Verhalten des Prompts. Du kannst folgendes in deine .bashrc (in deinem Homeverzeichnis) schreiben:
if test \( "$TERM" = "xterm" -o "${TERM#screen}" != "$TERM" \) -a -z "$EMACS" then export PS1="\[\033[31m\]\[\e]2;\u@\h:\w\007\e]1;\h\007\]\u@\h:\w> \[\033[0m\]" else export PS1="\[\033[31m\]\u@\h:\w> \[\033[0m\]" fi
Dann die Datei neu einlesen oder eine neue Bash eröffnen damit die Änderung wirkt
es genügt .bashrc im Homeverzeichnis abzusetzen
Danach solltest du einen roten Prompt haben.
farbigen Errorlevel im Prompt
Errorlevel in rot anzeigen (Danke an reini123)
folgenden Code in der aktuellen Bash ausführen oder für dauerhaften Gebrauch in der ~/.bashrc ablegen
PROMPT_COMMAND='LASTERROR="[$?]" ; test "$LASTERROR" = "[0]" || echo -ne "\033[93;41m${LASTERROR}\033[0m"' export PROMPT_COMMAND
Jetzt wird der Rückgabe Wert eines Befehles oder Scriptes insofern er nicht 0 ist, innerhalb des folgenden Prompt farbig angezeigt, das kann sehr hilfreich sein zB für das Schreiben und Testen von Befehlsketten oder Scripte.
Links zum Thema Prompt
Anwendungen innerhalb des ls Befehles
Der ls Befehl kann Dateientypen an Dateiattributen und Prefixen erkenne und farbig darstellen.
siehe dazu auch [man ls]
verantwortlich für das Einschalten dieser Funktion ist die Option --color
Die Zuordnung der Farben zu den Dateitypen wird global für alle in der /etc/DIR_COLORS vorgenommen. Jedem User sollte es aber möglich sein diese Datei in sein Homeverzeichnis unter dem Namen .dir_colors zu kopieren, dann kann er seinen Bedürfnissen und Vorlieben entsprechend, selbst seine persönlichen Einstellungen durch änderen dieser Datei vornehmen.
cp /etc/DIR_COLORS ~/.dir_colors
danach einfach die bash neu starten, damit die Änderungen wirken.
mehr infos mit man DIR_COLORS