Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Barevné echo  (Přečteno 5380 krát)

ramael

  • Stálý člen
  • **
  • Příspěvků: 644
Barevné echo
« kdy: 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
Lenovo: ThinkPad X380 Yoga
Joutůůůůb

juwa2

  • Závislák
  • ***
  • Příspěvků: 4948
Re:Barevné echo
« Odpověď #1 kdy: 13 Ledna 2023, 18:00:08 »
A tohle znáš?
Kód: [Vybrat]
echo -e "\e[44mahoj\e[0m"
echo -e "\e[31mahoj\e[0m"

ramael

  • Stálý člen
  • **
  • Příspěvků: 644
Re:Barevné echo
« Odpověď #2 kdy: 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
Lenovo: ThinkPad X380 Yoga
Joutůůůůb

 

Provoz zaštiťuje spolek OpenAlt.