Introductie
De echo
commando voert een gegeven string uit naar de standaard uitvoerpijp, meestal wijzend naar de terminal. Hoewel de standaard uitvoerpijp naar andere interfaces kan wijzen, is de echo
commando wordt meestal gebruikt om berichten in de terminal af te drukken en weer te geven. Standaard neemt de tekst van het weergegeven bericht de kleur over van andere tekst in de terminal (die op zichzelf aanpasbaar is). Er zijn echter verschillende manieren waarop u de uitvoerkleur van kunt wijzigen echo
– zowel voor individuele strings als voor hele berichten.
In deze korte handleiding bekijken we hoe u de uitvoerkleur van kunt wijzigen
echo
in op Linux gebaseerde systemen, met behulp van ANSI-escapecodes,tput
en hoe je dit proces minder uitgebreid kunt maken in Bash-scripts.
Uitvoerkleur wijzigen met ANSI-escapecodes
De eenvoudigste manier om de kleur te wijzigen is door middel van ANSI-escape-reeksen/codes. Alle ANSI-escapecodes beginnen met de Escape
karakter, dat in verschillende formaten kan worden weergegeven - 27
in decimaal, x1B
in hexadecimaal, als de controletoets ^[
of 33
in octaal formaat. De reeksen worden dan gevolgd door het commando:
33[command
Waar de openingshaak (Bedieningsvolgorde-introducer) is optioneel, maar helpt het commando te scheiden van het escape-teken. Wanneer je een kleurcode als het commando, verandert het de kleur van de aankomende tekst:
33[0;34
0;34
is bijvoorbeeld de code voor de kleur blauw. Alleen hiermee kunt u de kleur van tekst in echo
met:
33[0;34Text
Waar Text
blauw zou zijn gekleurd. Overweeg ook een eenvoudig bash-script om af te drukken "Welkom in Frankrijk" in de kleuren van de Franse vlag:
#!/bin/bash
BLUE='33[0;34m'
WHITE= '33[0;37m'
RED= '33[0;31m'
echo -e "${Blue}Welcome ${WHITE}to ${RED}France"
De optionele -e
vlag van de echo
commando kunt u speciale tekens gebruiken zoals n
(nieuwe regel) en t
(tab) binnenkant van de invoerreeks.
Zodra u het script uitvoert:
$ ./colors.sh
Het resulteert in:
De ANSI-codes zijn niet beperkt tot kleur, maar kunnen ook voor stijl worden toegepast. De codes 0..9
tekststijlen vertegenwoordigen, terwijl de codes 30...37
vertegenwoordigen kleuren:
Kleur | Codes | Tekststijlen | Codes |
Zwart | 30 | Eenvoudige tekst | 0 |
Rood | 31 | Vette tekst | 1 |
Groen | 32 | Tekst met lage intensiteit | 2 |
Bruin / Oranje | 33 | Tekst onderstrepen | 4 |
Blauw | 34 | Knipperende tekst | 5 |
Paars | 35 | Onzichtbare tekst | 8 |
Cyaan | 36 | Doorgestreepte tekst | 9 |
Licht Grijs | 37 |
Laten we een bash-script maken om enkele van deze opties te verkennen:
#!/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"
Het uitvoeren van dit script resulteert in:
Bekijk onze praktische, praktische gids voor het leren van Git, met best-practices, door de industrie geaccepteerde normen en bijgevoegd spiekbriefje. Stop met Googlen op Git-commando's en eigenlijk leren het!
Op dezelfde manier kunt u de achtergrondkleur van deze teksten wijzigen met behulp van codes 40..47
:
kleur | Codes |
Zwart | 40 |
Rood | 41 |
Groen | 42 |
Bruin / Oranje | 43 |
Blauw | 44 |
Paars | 45 |
Cyaan | 46 |
Licht Grijs | 47 |
Het wijzigen van de achtergrond van een gegeven string komt neer op dezelfde regel als bij het wijzigen van de letterkleur - de code zelf verandert het gedrag:
#!/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"
Opmerking: Als vuistregel kun je lettertypekleuren vertalen naar achtergrondkleuren door 10 toe te voegen. 30
is zwarte letterkleur, 40
is een zwarte achtergrondkleur.
Wijzig de uitvoerkleur met de tput
Een alternatief voor ANSI-codes is het gebruik van de tput
opdracht:
$ tput setaf color_code
setf
maakt 8 kleuren mogelijk, terwijl setaf
staat 256 kleuren toe, dus afhankelijk van het commando dat je gebruikt, kun je tussen 0..7
en 0..255
als de kleurcodes. Te gebruiken zowel commando's wijden 0..7
met dezelfde kleurcodes, terwijl met setaf
, 8..15
zijn kleuren met een hoge intensiteit, en 16..231
zijn verschillende tinten van de eerste 8, en 232..255
zijn grijswaardenkleuren:
credit: Wikipedia
Tenslotte tput
stelt je ook in staat om de achtergrondkleur te veranderen, vet toe te voegen, de intensiteit te verlagen, enz. met andere commando's:
Tekststijlen | commando's |
Voorgrondkleur | setaf |
Achtergrond kleur | ingesteld |
Geen stijl | sgv0 |
Vette tekst | pin |
Tekst met lage intensiteit | Sun. |
Tekst onderstrepen | smullen |
Knipperende tekst | knipperen |
Tekst omkeren | rev |
Laten we een ander script maken dat gebruik maakt van tput
om de uitvoerkleur te wijzigen: 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!"
Dit script drukt de volgende uitvoer af in de terminal:
Het tput-commando biedt een gemakkelijke manier om elke kleur af te drukken via een eenvoudige kleurcode. Laten we nu een script maken dat elke beschikbare kleurcode voor het tput-commando kan afdrukken:
#!/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
Het zal 0 tot 255 kleuren en hun codes afdrukken:
Conclusie
In deze korte handleiding hebben we bekeken hoe u de kleur van echo
's uitvoer in Linux - met behulp van ANSI Escape Sequences en de tput
opdracht.
We hebben ook onderzocht hoe u het proces minder uitgebreid kunt maken met behulp van Bash-variabelen, het aanpassen van achtergrondkleuren en het opmaken van tekst.