Avantajul Linux este că puteți personaliza orice dacă doriți. Acesta este avantajul sistemelor proiective față de sistemele procedurale. Este un fel de constructor, format din blocuri individuale, fiecare dintre acestea putând fi personalizat după bunul plac.
Este deosebit de interesant dacă nu copiați doar soluții gata făcute, ci încercați să înțelegeți ce și cum funcționează. Și chiar și atunci când rezolvați o sarcină frivolă, învățați ceva nou.
De exemplu, doriți să ajustați culorile terminalului linux în ieșirea comenzii ls
.
Din documentația ls
puteți înțelege că setarea culorilor pentru ieșire se face cu ajutorul utilitarului dircolors, care fie stabilește parametrii de culoare din propria bază de date, fie îi preia din fișierul ~/.dircolors
. De asemenea, s-a menționat că inițializarea utilizării culorilor se face prin ~/.bashrc
, fișierul de setări al shell-ului, și că parametrii în sine sunt definiți prin variabila LC_COLORS
.
Următorul script a fost găsit în .bashrc
:
Esența sa este de a verifica prezența utilitarului dircolors pe sistem, de a atribui o valoare variabilei și, în caz de succes, de a utiliza parametrul --color=auto
de fiecare dată când este apelat ls
.
Dacă executați utilitarul dircolors, acesta emite valoarea variabilei LC_COLOR
.
De asemenea, este posibil să se afișeze valoarea variabilei LC_COLORS
într-o formă structurată, prin specificarea cheii:
$ dircolors -p
Deoarece ieșirea este lungă, nu o voi da aici.
Dacă redirecționați ieșirea dircolors -p
> ~/.dircolors
, va fi creat un fișier structurat din care vor fi preluate setările de culoare. Prin editarea acestui fișier și setați setările de culoare pentru ieșirea ls
.
În fișierul .dircolors
creat există un indiciu:
Setarea secvenței prin punct și virgulă și obținem culoarea de care avem nevoie în consola linux, conform listei. Culorile terminalului linux sunt de la 30 la 37 pentru culoarea fontului și de la 40 la 47 pentru fundal. De exemplu:
DIR 01;34 implică faptul că numele directoarelor vor fi bold și albastre.
Dar în acest fel obțineți doar opt culori, iar emulatoarele de terminale moderne sunt capabile să afișeze cel puțin 256.
Există și alte modalități de a seta culoarea. De exemplu, EXEC 38;5;208;1 oferă un font portocaliu gros pentru fișierele executabile.
Pentru a nu trece manual prin culorile linux, există un tabel de culori gata făcut
Înlocuind valoarea culorii 38;5;x - unde x este culoarea din tabel, obținem rezultatul necesar. Veți obține ceva de genul acesta:
Cum funcționează? Ideea este că setarea culorii de ieșire a informațiilor în emulatorul de terminal se face cu ajutorul codurilor de scăpare ANSI. Aceasta este o anumită secvență de caractere care nu este imprimată pe ecran, dar afectează ieșirea. Se numește astfel deoarece începe cu [ - codul "Esc". Deoarece există multe terminale și emulatoare de terminale, aceste coduri de control sunt standardizate. Controlul culorilor prin secvența de la 30 la 37 este standardul ECMA-48. Informații despre acesta pot fi găsite în secțiunea console_codes
.
Odată ce ați înțeles cum să setați culorile linux prin intermediul codurilor esc, este ușor să reproiectați și să colorați invitația. Variabila PS1, definită în fișierul ~/.bashrc
, este responsabilă de ieșirea acesteia
În Linux Mint, scriptul de inițializare a acesteia arată astfel:
Adică, mai întâi se determină dacă scriptul a fost rulat de root sau de un utilizator normal. Deoarece în marea majoritate a cazurilor este cea de-a doua opțiune, linia care urmează primului "else" trebuie editată. Formatul liniei este descifrat în documentația bash, în secțiunea "Promting". Acesta implică faptul că secvența esc trebuie să înceapă cu "[" și să se încheie cu "]". Astfel:
u
- afișează numele utilizatorului;h
- afișează numele gazdei;w
- afișează numele directorului de lucru;Ce altceva poate fi emis în prompt:
d
- data, în formatul "Wed Dec 28";A
- ora, în format de 24 de ore;Să introducem ceva mai interesant:
PS1='${debian_chroot:+($debian_chroot)}[[01;32m]Matrix has you,u![[00m] [[01;34m]Blue pill[[00m] or [[31m]red?[[00m]--->$ '
Și linia de prompt va arăta astfel: