Betalingsmetoder Abuse

Linux-terminalens farver

26.09.2021, 22:47

Fordelen ved Linux er, at man kan tilpasse alt, hvis man vil. Det er fordelen ved projektive systemer frem for procedurale systemer. Det er en slags konstruktør, der består af individuelle blokke, som hver især kan tilpasses efter ønske.

Det er især interessant, hvis man ikke bare kopierer færdige løsninger, men prøver at forstå, hvad og hvordan det fungerer. Og selv når man løser en useriøs opgave, lærer man noget nyt.

Farvelægning af farverne i outputtet

For eksempel vil du gerne justere linux-terminalens farver i outputtet fra ls-kommandoen.

Ud fra ls-dokumentationen kan man forstå, at indstillingen af farverne i outputtet sker ved hjælp af dircolors-værktøjet, som enten indstiller farveparametrene fra sin egen database eller henter dem fra filen ~/.dircolors. Det blev også nævnt, at initialiseringen af farvebrug sker via ~/.bashrc, shell-indstillingsfilen, og at selve parametrene defineres via variablen LC_COLORS.

Følgende script blev fundet i .bashrc:

Dets essens er at tjekke, om dircolors-værktøjet findes på systemet, tildele en værdi til variablen og, hvis det lykkes, bruge parameteren --color=auto, hver gang ls kaldes.

Hvis du kører dircolors-værktøjet, udsender det værdien af LC_COLOR-variablen.

Det er også muligt at udskrive værdien af LC_COLORS-variablen i struktureret form ved at angive nøglen:

$ dircolors -p

Da outputtet er langt, vil jeg ikke give det her.

Hvis du omdirigerer outputtet dircolors -p > ~/.dircolors, vil der blive oprettet en struktureret fil, hvorfra farveindstillingerne vil blive taget. Ved at redigere denne fil og indstille farveindstillingerne for ls-outputtet.

I den oprettede .dircolors-fil er der et hint:

Indstil sekvensen med semikolon og få den farve, vi har brug for i linux-konsollen, i henhold til listen. Linux-terminalfarverne er fra 30 til 37 for skrifttypefarve og fra 40 til 47 for baggrund. For eksempel

DIR 01;34 betyder, at biblioteksnavne bliver fede og blå.

Men på denne måde får du kun otte farver, og moderne terminalemulatorer er i stand til at vise mindst 256.

Der er andre måder at indstille farven på. For eksempel giver EXEC 38;5;208;1 orange tyk skrift til eksekverbare filer.

For ikke at skulle gennemgå linux-farverne manuelt er der en færdiglavet tabel med farver

Ved at indsætte farveværdien 38;5;x - hvor x er farven fra tabellen - får vi det nødvendige resultat. Du får noget i retning af dette:

Hvordan fungerer det? Pointen er, at indstillingen af farven på den information, der sendes ud i terminalemulatoren, sker ved hjælp af ANSI escape-koder. Det er en bestemt sekvens af tegn, som ikke udskrives på skærmen, men som påvirker outputtet. Den hedder sådan, fordi den starter med [ - koden "Esc". Da der findes mange terminaler og terminalemulatorer, er disse kontrolkoder standardiserede. Farvestyring gennem sekvensen fra 30 til 37 er ECMA-48-standarden. Du kan finde oplysninger om den i afsnittet console_codes.

Farvelægning af invitationslinjen

Når man først har forstået, hvordan man indstiller Linux-farver via esc-koder, er det nemt at redesigne og farve prompten. PS1-variablen, der er defineret i ~/.bashrc-filen, er ansvarlig for dens output

I Linux Mint ser scriptet til at initialisere den sådan ud:

Det vil sige, at det først afgøres, om scriptet blev kørt af root eller en normal bruger. Da det i langt de fleste tilfælde er den anden mulighed, skal linjen efter det første 'else' redigeres. Linjens format kan aflæses i bash-dokumentationen i afsnittet "Promting". Det indebærer, at esc-sekvensen skal starte med "[" og slutte med "]". På den måde:

  • [[01;32m] - indstiller farven grøn;
  • u - udsender brugernavnet;
  • h - udsender værtsnavnet;
  • [[00m] - rydder de indstillede attributter;
  • [[01;34m] - indstiller farven blå;
  • w - udsender navnet på arbejdsmappen;
  • Hej - et eksempel på, at enhver afledt tekst kan udskrives.

Hvad der ellers kan vises i prompten:

  • d - datoen, i formatet "Wed Dec 28";
  • A - tid, i 24-timers format;
  • ! - nummeret på den aktuelle kommando i historikken;
  • - overførsel af output til en anden linje;

Lad os introducere noget mere interessant:

PS1='${debian_chroot:+($debian_chroot)}[[01;32m]Matrix has you,u![[00m] [[01;34m]Blue pill[[00m] or [[31m]red?[[00m]--->$ '

Og prompt-linjen vil se sådan ud: