Het voordeel van Linux is dat je alles kunt aanpassen als je dat wilt. Dit is het voordeel van projectieve systemen ten opzichte van procedurele systemen. Het is een soort constructor die bestaat uit individuele blokken die elk naar believen kunnen worden aangepast.
Het is vooral interessant als je niet zomaar kant-en-klare oplossingen kopieert, maar probeert te begrijpen wat en hoe het werkt. En zelfs als je een frivole taak oplost, leer je iets nieuws.
Je wilt bijvoorbeeld de kleuren van de Linux terminal aanpassen in de uitvoer van het commando ls
.
Uit de ls
documentatie kun je begrijpen dat het instellen van de kleuren voor de uitvoer wordt gedaan met het hulpprogramma dircolors, dat de kleurparameters ofwel uit zijn eigen database instelt of ze uit het bestand ~/.dircolors
haalt. Er werd ook vermeld dat de initialisatie van het kleurgebruik wordt gedaan via ~/.bashrc
, het shell instellingenbestand, en dat de parameters zelf worden gedefinieerd via de LC_COLORS
variabele.
Het volgende script werd gevonden in .bashrc
:
De essentie is om te controleren op de aanwezigheid van het hulpprogramma dircolors op het systeem, een waarde toe te wijzen aan de variabele en, indien succesvol, de --color=auto
parameter te gebruiken elke keer dat ls
wordt aangeroepen.
Als je het hulpprogramma dircolors draait, wordt de waarde van de LC_COLOR
variabele uitgevoerd.
Het is ook mogelijk om de waarde van de LC_COLORS
variabele gestructureerd uit te voeren door de sleutel op te geven:
$ dircolors -p
Omdat de uitvoer lang is, zal ik deze hier niet geven.
Als je de uitvoer dircolors -p
> ~/.dircolors
omleidt, wordt er een gestructureerd bestand gemaakt waaruit de kleurinstellingen worden gehaald. Bewerk dit bestand en stel de kleurinstellingen in voor de uitvoer van ls
.
In het aangemaakte .dircolors
bestand staat een hint:
Door de volgorde in te stellen met een puntkomma, krijgen we de kleur die we nodig hebben in de Linux console, volgens de lijst. De kleuren van de linux terminal zijn van 30 tot 37 voor de kleur van het lettertype en van 40 tot 47 voor de achtergrond. Bijvoorbeeld:
DIR 01;34 betekent dat mapnamen vet en blauw worden weergegeven.
Maar op deze manier krijg je slechts acht kleuren, en moderne terminal emulators kunnen er minstens 256 weergeven.
Er zijn andere manieren om de kleur in te stellen. EXEC 38;5;208;1 geeft bijvoorbeeld een oranje dik lettertype voor uitvoerbare bestanden.
Om linux-kleuren niet handmatig te hoeven doorlopen, is er een kant-en-klare tabel met kleuren
Door de kleurwaarde 38;5;x in te vullen - waarbij x de kleur uit de tabel is, krijgen we het benodigde resultaat. Je krijgt dan zoiets als dit:
Hoe werkt het? Het punt is dat het instellen van de kleur van informatie die wordt uitgevoerd in de terminal emulator wordt gedaan met behulp van ANSI escape codes. Dit is een bepaalde reeks tekens die niet op het scherm wordt afgedrukt, maar de uitvoer beïnvloedt. Het wordt zo genoemd omdat het begint met [ - code "Esc". Omdat er veel terminals en terminalemulators zijn, zijn deze controlecodes gestandaardiseerd. Kleurbesturing via de reeks van 30 tot 37 is de ECMA-48 standaard. Informatie hierover kun je vinden in de console_codes
sectie.
Als je eenmaal begrijpt hoe je Linux kleuren kunt instellen via esc codes, is het eenvoudig om de prompt opnieuw te ontwerpen en te kleuren. De PS1 variabele, gedefinieerd in het ~/.bashrc
bestand, is verantwoordelijk voor de uitvoer ervan
In Linux Mint ziet het script om het te initialiseren er als volgt uit:
Dat wil zeggen, er wordt eerst bepaald of het script is uitgevoerd door root of door een normale gebruiker. Aangezien het in de overgrote meerderheid van de gevallen de tweede optie is, moet de regel na de eerste 'else' worden bewerkt. Het formaat van de regel wordt ontcijferd in de bash documentatie, in de sectie "Promting". Het impliceert dat de esc-sequentie moet beginnen met "[" en eindigen met "]". Dus:
u
- voert de gebruikersnaam uit;h
- voert de hostnaam uit;w
- geeft de naam van de werkmap weer;Wat er nog meer kan worden uitgevoerd in de prompt:
d
- de datum, in het formaat "wo dec 28";A
- de tijd, in het 24-uurs formaat;Laten we iets interessanters introduceren:
PS1='${debian_chroot:+($debian_chroot)}[[01;32m]Matrix has you,u![[00m] [[01;34m]Blue pill[[00m] or [[31m]red?[[00m]--->$ '
En de promptregel ziet er dan zo uit: