Výhodou Linuxu je, že ak chcete, môžete si čokoľvek prispôsobiť. To je výhoda projektívnych systémov oproti procedurálnym systémom. Ide o druh konštruktora pozostávajúceho z jednotlivých blokov, z ktorých každý možno ľubovoľne prispôsobiť.
Je to zaujímavé najmä vtedy, ak nekopírujete len hotové riešenia, ale snažíte sa pochopiť, čo a ako funguje. A aj pri riešení neserióznej úlohy sa naučíte niečo nové.
Napríklad chcete upraviť farby linuxového terminálu vo výstupe príkazu ls
.
Z dokumentácie k príkazu ls
pochopíte, že nastavenie farieb výstupu sa vykonáva pomocou nástroja dircolors, ktorý buď nastavuje parametre farieb z vlastnej databázy, alebo ich preberá zo súboru ~/.dircolors
. Bolo tiež spomenuté, že inicializácia používania farieb sa vykonáva prostredníctvom ~/.bashrc
, súboru s nastaveniami shellu, a že samotné parametre sa definujú prostredníctvom premennej LC_COLORS
.
V súbore .bashrc
bol nájdený nasledujúci skript:
Jeho podstatou je kontrola prítomnosti nástroja dircolors v systéme, priradenie hodnoty premennej a v prípade úspešnosti použitie parametra --color=auto
pri každom volaní ls
.
Ak spustíte nástroj dircolors, vypíše hodnotu premennej LC_COLOR
.
Hodnotu premennej LC_COLORS
je možné vypisovať aj v štruktúrovanej podobe, a to zadaním kľúča:
$ dircolors -p
Keďže výstup je dlhý, nebudem ho tu uvádzať.
Ak presmerujete výstup dircolors -p
> ~/.dircolors
, vytvorí sa štruktúrovaný súbor, z ktorého sa prevezmú nastavenia farieb. Úpravou tohto súboru a nastavením farieb pre výstup ls
.
Vo vytvorenom súbore .dircolors
sa nachádza nápoveda:
Nastavením postupnosti cez stredník a získame farbu, ktorú potrebujeme v linuxovej konzole, podľa uvedených. Farby linuxového terminálu sú od 30 do 37 pre farbu písma a od 40 do 47 pre farbu pozadia. Napríklad:
DIR 01;34 znamená, že názvy adresárov budú tučné a modré.
Takto však získate len osem farieb, pričom moderné emulátory terminálov ich dokážu zobraziť aspoň 256.
Existujú aj iné spôsoby nastavenia farieb. Napríklad EXEC 38;5;208;1 poskytuje oranžové hrubé písmo pre spustiteľné súbory.
Aby ste nemuseli prechádzať linuxové farby ručne, existuje pripravená tabuľka farieb
Dosadením hodnoty farby 38;5;x - kde x je farba z tabuľky, dostaneme potrebný výsledok. Dostanete niečo takéto:
Ako to funguje? Ide o to, že nastavenie farby výstupných informácií v emulátore terminálu sa vykonáva pomocou escape kódov ANSI. Ide o určitú postupnosť znakov, ktorá sa nevypisuje na obrazovku, ale ovplyvňuje výstup. Nazýva sa tak preto, lebo sa začína [ - kódom "Esc". Keďže existuje veľa terminálov a emulátorov terminálov, tieto riadiace kódy sú štandardizované. Farebná kontrola prostredníctvom postupnosti od 30 do 37 je štandardom ECMA-48. Informácie o ňom nájdete v časti console_codes
.
Keď pochopíte, ako nastaviť farby linuxu prostredníctvom esc kódov, je jednoduché zmeniť dizajn a farbu výziev. Za jeho výstup je zodpovedná premenná PS1, ktorá je definovaná v súbore ~/.bashrc
V Linux Minte vyzerá skript na jej inicializáciu takto:
To znamená, že sa najprv zistí, či bol skript spustený užívateľom root alebo bežným užívateľom. Keďže v drvivej väčšine prípadov je to druhá možnosť, riadok nasledujúci po prvom 'else' by sa mal upraviť. Formát riadku je dešifrovaný v dokumentácii bash, v časti "Promting". Vyplýva z nej, že sekvencia esc by mala začínať znakom "[" a končiť znakom "]". Teda:
u
- vypíše meno používateľa;h
- vypíše názov hostiteľa;w
- vypíše názov pracovného adresára;Čo všetko ešte môže byť vypísané vo výzve:
d
- dátum vo formáte "st 28. decembra";A
- čas v 24-hodinovom formáte;Predstavíme si niečo zaujímavejšie:
PS1='${debian_chroot:+($debian_chroot)}[[01;32m]Matrix has you,u![[00m] [[01;34m]Blue pill[[00m] or [[31m]red?[[00m]--->$ '
A riadok výzvy bude vyzerať takto: