Beskrivning
Smakämnen echo
kommandot matar ut en given sträng till standardutgångsrör, vanligtvis pekar på terminalen. Även om standardutgångsröret kan peka på andra gränssnitt – den echo
kommandot används vanligtvis för att skriva ut och visa meddelanden i terminalen. Som standard ärver texten i det visade meddelandet färgen på annan text i terminalen (som är anpassningsbar i och för sig). Det finns dock flera sätt du kan ändra utdatafärgen på echo
– både för enskilda strängar och för hela meddelanden.
I den här korta guiden tar vi en titt på hur du kan ändra utdatafärgen på
echo
i Linux-baserade system, med ANSI escape-koder,tput
och hur du kan göra denna process mindre omfattande i Bash-skript.
Ändra utdatafärg med ANSI Escape-koder
Det enklaste sättet att ändra färg är genom ANSI escape-sekvenser/koder. Alla ANSI escape-koder börjar med Escape
tecken, som kan representeras i olika format – 27
i decimal, x1B
i hexadecimal, som kontrollnyckel ^[
, eller 33
i oktalt format. Sekvenserna följs sedan av kommandot:
33[command
Där öppningsfästet (Control Sequence Introducer) är valfritt, men hjälper till att skilja kommandot från escape-tecknet. När du sätter en färg kod som kommandot ändrar det färgen på den mötande texten:
33[0;34
0;34
är koden för färgen blå till exempel. Enbart med detta kan du ändra färgen på texten echo
med:
33[0;34Text
Var Text
skulle färgas blå. Alternativt kan du överväga ett enkelt bash-skript att skriva ut "Välkommen till Frankrike" i den franska flaggans färger:
#!/bin/bash
BLUE='33[0;34m'
WHITE= '33[0;37m'
RED= '33[0;31m'
echo -e "${Blue}Welcome ${WHITE}to ${RED}France"
Valfritt -e
flaggan echo
kommando låter dig använda specialtecken som n
(ny linje) och t
(tab) inuti inmatningssträngen.
När du kör skriptet:
$ ./colors.sh
Det resulterar i:
ANSI-koderna är inte begränsade till färg – utan kan också användas för stil. Koderna 0..9
representerar textstilar, medan koderna 30...37
representerar färger:
Färg | Koder | Textstilar | Koder |
Svart | 30 | Enkel text | 0 |
Red | 31 | Fet text | 1 |
Grön | 32 | Låg intensitet text | 2 |
Brown / Orange | 33 | Stryk under text | 4 |
Blå | 34 | Blinkande text | 5 |
Purple | 35 | Osynlig text | 8 |
Cyan | 36 | Genomstruken text | 9 |
Ljusgrå | 37 |
Låt oss skapa ett bash-skript för att utforska några av dessa alternativ:
#!/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"
Att köra det här skriptet resulterar i:
Kolla in vår praktiska, praktiska guide för att lära dig Git, med bästa praxis, branschaccepterade standarder och medföljande fuskblad. Sluta googla Git-kommandon och faktiskt lära Det!
På samma sätt kan du ändra bakgrundsfärgen för dessa texter med hjälp av koder 40..47
:
färg | Koder |
Svart | 40 |
Red | 41 |
Grön | 42 |
Brown / Orange | 43 |
Blå | 44 |
Purple | 45 |
Cyan | 46 |
Ljusgrå | 47 |
Att ändra bakgrunden för en given sträng handlar om samma regel som när man ändrar teckensnittsfärgen – själva koden ändrar beteendet:
#!/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"
Notera: Som en tumregel – du kan översätta teckensnittsfärger till bakgrundsfärger genom att lägga till 10. 30
är svart typsnittsfärg, 40
är svart bakgrundsfärg.
Ändra utdatafärgen med tput
Ett alternativ till ANSI-koder är att använda tput
kommando:
$ tput setaf color_code
setf
tillåter 8 färger, medan setaf
tillåter 256 färger så beroende på vilket kommando du använder kan du gå mellan 0..7
och 0..255
som färgkoderna. Både kommandon dedikerar 0..7
till samma färgkoder, medan med setaf
, 8..15
är högintensiva färger och 16..231
är olika nyanser av de första 8, och 232..255
är gråskalefärger:
Credit: wikipedia
Slutligen tput
låter dig också ändra bakgrundsfärgen, lägga till fetstil, sänka intensiteten etc. med andra kommandon:
Textstilar | Kommandon |
Förgrundsfärg | setaf |
Bakgrundsfärg | setab |
Ingen stil | sgv0 |
Fet text | nål |
Lågintensiv text | dim |
Stryk under text | smul |
Blinkande text | blinka |
Omvänd text | rev |
Låt oss skapa ett annat skript som använder tput
för att ändra utskriftsfärgen 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!"
Detta skript kommer att skriva ut följande utdata i terminalen:
Kommandot tput ger ett enkelt sätt att skriva ut vilken färg som helst genom en enkel färgkod. Låt oss nu skapa ett skript som kan skriva ut alla tillgängliga färgkoder för kommandot tput:
#!/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 kommer att skriva ut 0 till 255 färger och deras koder:
Slutsats
I den här korta guiden – vi har tagit en titt på hur du kan ändra färgen på echo
s utdata i Linux – med ANSI Escape Sequences och tput
kommando.
Vi har också utforskat hur du kan göra processen mindre omfattande med Bash-variabler, justera bakgrundsfärger och stiltext.