Fórum Ubuntu CZ/SK

Ostatní => Tipy a triky pro Linux => Téma založeno: ramael 13 Ledna 2023, 09:36:46

Název: Barevné echo
Přispěvatel: ramael 13 Ledna 2023, 09:36:46
Pokud chce někdo něco vypsat barevně na terminálu má to na psaní složitější. Vytvořil jsem jednoduchý script používající standardní barvy.
Nazval jsem to put, ale každý tomu může dát jměno jaké chce. Mám to uložené v bin složce:
Kód: [Vybrat]
cat /bin/put
#! /usr/bin/env bash
#
# sekvence:
# 38 fg barva
# 48 bg barva
# \e[m resetuje barvy
# echo -e "\e[38;5;nom"text
# vždy zobrazí barevný text
# např zobrazí text červeně:
# echo -e "\e[38;5;1m"text
# zobrazí černý text na červeném pozadí:
# echo -e "\e[48;5;1m\e[38;5;0m"text"\e[m"
#

# Připraví se proměnné
fgcolor=
bgcolor=
text=

# fce vytiskne co je třeba a ukončí skript
be(){
echo -e "\e[38;5;"$fgcolor"m\e[48;5;"$bgcolor"m"$text"\e[m"
exit
}


# načtení vstupů
read -r first second other <<< "$@"

# Pokud první parametr neobsahuje escape sekvenci vytiskni vstup a ukonči to
if [[ $first != \\* ]]; then
text="$first $second $other"
be
fi

# ořízne escape sekvenci a připraví barvu písma
fgcolor=${first#\\}


# Pokud druhý parametr neobsahuje escape sekvenci vytiskni vstup s barvou popředí a ukonči to
if [[ $second != \\* ]]; then
text="$second $other"
be
fi

# ořízne escape sekvenci a připraví barvu pozadí
bgcolor=${second#\\}
text=$other

# vytiskni vstup s příslušnýma barvama a ukonči se
be
Použití je místo příkazu echo. Barvy musí být za escape sekvencí. První barva určuje barvu písma a druhá barvu pozadí. Pokud nejsou udány, nic se neděje a vypíše se to jako klasické echo.
První příklad vypíše ahoj podle systému. Druhý bude červeně ahoj se systémovým pozadím. Třetí červené ahoj na zaleném pozadí. A poslední ahoj bude v systémové barvě na zeleném pozadí:
Kód: [Vybrat]
put ahoj
put \\1 ahoj
put \\1 \\2 ahoj
put \\ \\1 ahoj
Název: Re:Barevné echo
Přispěvatel: juwa2 13 Ledna 2023, 18:00:08
A tohle znáš?
Kód: [Vybrat]
echo -e "\e[44mahoj\e[0m"
echo -e "\e[31mahoj\e[0m"
Název: Re:Barevné echo
Přispěvatel: ramael 13 Ledna 2023, 20:02:30
Takhle to funguje jen v 8b "pojmenovaných" barvách. Můžeš si číslo té barvy namapovat klidně na jinou. Mě šlo o to zjednodušení. Psát to bez těch dlouhých escape sekvencí. V kterých se pak sám autor nevyzná. Dá se tam nacpat i truecolor, ale to už je dle mne zbytečné. Místo \e jde napsat \033