Der Vorteil von Linux ist, dass Sie alles anpassen können, wenn Sie wollen. Das ist der Vorteil von projektiven Systemen gegenüber prozeduralen Systemen. Es ist eine Art Konstrukteur, der aus einzelnen Blöcken besteht, von denen jeder nach Belieben angepasst werden kann.
Besonders interessant wird es, wenn man nicht einfach vorgefertigte Lösungen kopiert, sondern versucht zu verstehen, was und wie es funktioniert. Und selbst beim Lösen einer frivolen Aufgabe lernt man etwas Neues.
Sie wollen zum Beispiel die Farben des Linux-Terminals in der Ausgabe des Befehls ls
anpassen.
Aus der ls-Dokumentation
geht hervor, dass die Einstellung der Farben für die Ausgabe mit Hilfe des Dienstprogramms dircolors erfolgt, das die Farbparameter entweder aus seiner eigenen Datenbank setzt oder aus der Datei ~/.dircolors
übernimmt. Es wurde auch erwähnt, dass die Initialisierung der Farbverwendung über ~/.bashrc
, die Shell-Einstellungsdatei, erfolgt und dass die Parameter selbst über die Variable LC_COLORS
definiert werden.
Das folgende Skript wurde in .bashrc
gefunden:
Im Wesentlichen prüft es, ob das Dienstprogramm dircolors auf dem System vorhanden ist, weist der Variablen einen Wert zu und verwendet im Erfolgsfall bei jedem Aufruf von ls
den Parameter --color=auto
.
Wenn Sie das Dienstprogramm dircolors ausführen, gibt es den Wert der Variablen LC_COLOR
aus.
Es ist auch möglich, den Wert der Variablen LC_COLORS
in strukturierter Form auszugeben, indem man den Schlüssel angibt:
$ dircolors -p
Da die Ausgabe lang ist, werde ich sie hier nicht wiedergeben.
Wenn Sie die Ausgabe dircolors -p
> ~/.dircolors
umleiten, wird eine strukturierte Datei erstellt, aus der die Farbeinstellungen übernommen werden. Indem Sie diese Datei bearbeiten und die Farbeinstellungen für die ls-Ausgabe
festlegen.
In der erstellten .dircolors-Datei
befindet sich ein Hinweis:
Man setzt die Reihenfolge durch Semikolon und erhält die Farbe, die man in der Linux-Konsole benötigt, entsprechend der aufgeführten. Die Linux-Terminalfarben sind von 30 bis 37 für die Schriftfarbe und von 40 bis 47 für den Hintergrund. Zum Beispiel:
DIR 01;34 bedeutet, dass die Verzeichnisnamen fett und blau sind.
Auf diese Weise erhalten Sie jedoch nur acht Farben, während moderne Terminal-Emulatoren mindestens 256 Farben darstellen können.
Es gibt auch andere Möglichkeiten, die Farbe einzustellen. EXEC 38;5;208;1 zum Beispiel ergibt eine orangefarbene, dicke Schrift für ausführbare Dateien.
Um die Linux-Farben nicht von Hand durchgehen zu müssen, gibt es eine vorgefertigte Farbtabelle
Wenn man den Farbwert 38;5;x einträgt - wobei x die Farbe aus der Tabelle ist - erhält man das gewünschte Ergebnis. Das Ergebnis sieht etwa so aus:
Wie funktioniert das? Der Punkt ist, dass die Einstellung der Farbe der im Terminalemulator ausgegebenen Informationen mit Hilfe von ANSI-Escape-Codes erfolgt. Dabei handelt es sich um eine bestimmte Zeichenfolge, die nicht auf den Bildschirm gedruckt wird, aber die Ausgabe beeinflusst. Sie wird so genannt, weil sie mit dem [ - Code "Esc" beginnt. Da es viele Terminals und Terminalemulatoren gibt, sind diese Steuercodes standardisiert. Die Farbsteuerung durch die Sequenz von 30 bis 37 ist der ECMA-48-Standard. Informationen dazu finden Sie im Abschnitt console_codes
.
Wenn Sie einmal verstanden haben, wie man Linux-Farben über esc-Codes einstellt, ist es einfach, die Eingabeaufforderung neu zu gestalten und einzufärben. Die Variable PS1, die in der Datei ~/.bashrc
definiert ist, ist für die Ausgabe verantwortlich
In Linux Mint sieht das Skript zu ihrer Initialisierung so aus:
Das heißt, es wird zunächst festgestellt, ob das Skript von root oder einem normalen Benutzer ausgeführt wurde. Da es sich in den allermeisten Fällen um die zweite Option handelt, sollte die Zeile nach dem ersten "else" bearbeitet werden. Das Format der Zeile wird in der Bash-Dokumentation im Abschnitt "Promting" entschlüsselt. Sie besagt, dass die esc-Sequenz mit "[" beginnen und mit "]" enden sollte. Demnach:
u
- gibt den Benutzernamen aus;h
- gibt den Rechnernamen aus;w
- gibt den Namen des Arbeitsverzeichnisses aus;Was sonst noch in der Eingabeaufforderung ausgegeben werden kann:
d
- das Datum, im Format "Wed Dec 28";A
- die Uhrzeit, im 24-Stunden-Format;Lassen Sie uns noch etwas Interessantes einführen:
PS1='${debian_chroot:+($debian_chroot)}[[01;32m]Matrix has you,u![[00m] [[01;34m]Blue pill[[00m] or [[31m]red?[[00m]--->$ '
Und die Prompt-Zeile sieht dann so aus: