Introduktion
echo
kommando udsender en given streng til standard udgangsrør, der typisk peger på terminalen. Selvom standardudgangsrøret kan pege på andre grænseflader - den echo
kommando bruges typisk til at udskrive og vise meddelelser i terminalen. Som standard arver teksten i den viste besked farven fra anden tekst i terminalen (som kan tilpasses i sig selv). Men - der er flere måder, du kan ændre outputfarven på echo
– både for individuelle strenge og for hele beskeder.
I denne korte guide tager vi et kig på, hvordan du kan ændre outputfarven på
echo
i Linux-baserede systemer, ved hjælp af ANSI escape-koder,tput
og hvordan du kan gøre denne proces mindre omfattende i Bash-scripts.
Skift outputfarve med ANSI Escape-koder
Den nemmeste måde at ændre farven på er gennem ANSI escape-sekvenser/koder. Alle ANSI escape-koder starter med Escape
karakter, som kan repræsenteres i forskellige formater – 27
i decimal, x1B
i hexadecimal, som kontrolnøgle ^[
eller 33
i oktal format. Sekvenserne efterfølges derefter af kommandoen:
33[command
Hvor åbningsbeslaget (Kontrolsekvensintroducer) er valgfri, men hjælper med at adskille kommandoen fra escape-tegnet. Når du sætter en farvekode som kommandoen ændrer den farven på den modkørende tekst:
33[0;34
0;34
er koden for farven blå f.eks. Med dette alene kan du ændre farven på teksten i echo
med:
33[0;34Text
Hvor Text
ville være farvet blå. Alternativt kan du overveje et simpelt bash-script til at udskrive “Velkommen til Frankrig” i det franske flags farver:
#!/bin/bash
BLUE='33[0;34m'
WHITE= '33[0;37m'
RED= '33[0;31m'
echo -e "${Blue}Welcome ${WHITE}to ${RED}France"
Valgfrit -e
flag af echo
kommando giver dig mulighed for at bruge specialtegn som f.eks n
(nylinje) og t
(tab) inde i inputstrengen.
Når du har kørt scriptet:
$ ./colors.sh
Det resulterer i:
ANSI-koderne er ikke begrænset til farve – men kan også anvendes til stil. Koderne 0..9
repræsentere tekststile, mens koderne 30...37
repræsentere farver:
Farve | Koder | Tekstformater | Koder |
Sort | 30 | Enkel tekst | 0 |
Rød | 31 | Fed tekst | 1 |
Grøn | 32 | Lav intensitet tekst | 2 |
Brun / Orange | 33 | Understreg tekst | 4 |
Blå | 34 | Blinkende tekst | 5 |
Lilla | 35 | Usynlig tekst | 8 |
Cyan | 36 | Gennemstreget tekst | 9 |
Lysegrå | 37 |
Lad os oprette et bash-script for at udforske nogle af disse muligheder:
#!/bin/bash
echo -e "33[0;33mSample text"
echo -e "33[1;33mBold text"
echo -e "33[2;33mLow intensity text"
echo -e "33[4;33mUnderline text"
echo -e "33[5;33mBlinking text"
echo -e "33[8;33mInvisible text"
echo -e "33[9;33mStrikethrough text"
Kørsel af dette script resulterer i:
Tjek vores praktiske, praktiske guide til at lære Git, med bedste praksis, brancheaccepterede standarder og inkluderet snydeark. Stop med at google Git-kommandoer og faktisk lærer det!
På samme måde kan du ændre baggrundsfarven på disse tekster ved hjælp af koder 40..47
:
farve | Koder |
Sort | 40 |
Rød | 41 |
Grøn | 42 |
Brun / Orange | 43 |
Blå | 44 |
Lilla | 45 |
Cyan | 46 |
Lysegrå | 47 |
Ændring af baggrunden for en given streng koger ned til den samme regel som ved ændring af skriftfarve - koden i sig selv ændrer adfærden:
#!/bin/bash
BLUE='33[0;44m'
BLACK='33[0;30m'
WHITE='33[0;30;47m'
RED='33[0;41m'
echo -e "${BLUE}Welcome ${WHITE}to ${RED}France"
Bemærk: Som en tommelfingerregel – du kan oversætte skriftfarver til baggrundsfarver ved at tilføje 10. 30
er sort skriftfarve, 40
er sort baggrundsfarve.
Skift outputfarve med tput
Et alternativ til ANSI-koder er at bruge tput
kommando:
$ tput setaf color_code
setf
giver mulighed for 8 farver, mens setaf
giver mulighed for 256 farver, så afhængigt af den kommando du bruger, kan du gå mellem 0..7
, 0..255
som farvekoderne. Både kommandoer dedikerer 0..7
til samme farvekoder, mens med setaf
, 8..15
er højintensive farver, og 16..231
er forskellige nuancer af de første 8, og 232..255
er gråtonefarver:
Credit: Wikipedia
Endelig tput
giver dig også mulighed for at ændre baggrundsfarven, tilføje fed, sænke intensiteten osv. med andre kommandoer:
Tekstformater | Kommandoer |
Forgrundsfarve | setaf |
Baggrundsfarve | sætab |
Ingen stil | sgv0 |
Fed tekst | pin |
Lav intensitet tekst | Sun. |
Understreg tekst | smul |
Blinkende tekst | blinke |
Omvendt tekst | rev |
Lad os oprette et andet script, der bruger tput
for at ændre outputfarven echo
:
#!/bin/bash
YELLOW=`tput setaf 3`
echo "${YELLOW}Changing"
WHITE=`tput setaf 7 bold`
echo "${WHITE}Colors"
BLUE=`tput setaf 4 smul`
echo "${BLUE}With tput"
CYAN=`tput setaf 6 blink`
echo "${CYAN}is less"
RED=`tput setab 1 setaf 7`
echo "${RED}verbose!"
Dette script vil udskrive følgende output i terminalen:
tput-kommandoen giver en nem måde at udskrive enhver farve gennem en simpel farvekode. Lad os nu oprette et script, der kan udskrive alle tilgængelige farvekoder for tput-kommandoen:
#!/bin/bash
tput init
end = $ (($ (tput colors) - 1))
w = 1
for c
in $ (seq 0 $end)
do
eval "$(printf " tput setaf % 3 s " " $c ")"
echo - n "$_"
[[$c - ge $ ((w * 2))]]
offset = 2 || offset = 0
[[$ (((c + offset) % (w - offset))) - eq $ (((w - offset) - 1))]]
echo
done
tput init
Det vil udskrive 0 til 255 farver og deres koder:
Konklusion
I denne korte guide – vi har taget et kig på, hvordan du kan ændre farven på echo
's output i Linux – ved hjælp af ANSI Escape Sequences og tput
kommando.
Vi har også undersøgt, hvordan du kan gøre processen mindre omfattende ved at bruge Bash-variabler, justere baggrundsfarver og stiltekst.