Colored shell script output library
Szukam definitywnego sposobu budowania skryptów powłoki, które generują kolorowe wyjście.
Niestety mam problem ze znalezieniem odpowiedniej lib lub dobrej techniki do tego. Znalazłem wiele pomocnych, ale prostych przykładów, takich jak to . Najbardziej obszernym przewodnikiem, jaki do tej pory znalazłem, jest Ten .
Zanim zacznę pisać własną bibliotekę, chcę sprawdzić, czy ktoś już ją napisał
Jeśli Twoje rozwiązanie nie pasuje do obserwacje poniżej to nie problem. Chciałbym również go przeczytać, aby mógł mi pomóc, jeśli zdecydujesz się napisać własne rozwiązanie
Moje główne obawy/obserwacje:
- musi być bezpieczny. Nie wszystkie terminale lub pagery / edytory (takie jak less, more, vim itd.) obsługują kolorowe wyjście lub bardziej stylowe wyjście (pogrubienie, mrugnięcie, kursywa itp.) {]}
-
musi być łatwy i czytelny. Korzystanie z ANSI escape codes bezpośrednio jest straszne:
echo -e '\033[32mthis is ugly and \033[1;32mvery green\033[0m'
- musi dać mi dostęp do całej palety kolorów i stylów dla tekstu pierwszoplanowego i tła. Większość przykładów, które znalazłem, używa tylko podstawowych kolorów dla tekstu pierwszoplanowego.
- preferowane jest używanie tylko prostych poleceń, takich jak bash lub prostsze powłoki wbudowane w polecenia i / lub popularne polecenia, które można znaleźć w większości systemów operacyjnych. Na przykład mogę użyć colorize , ale potrzebowałbym ruby (to trochę ok) i colorize gem installed (not ok)
- Tput wydaje się być dobrą opcją, ponieważ może dość dobrze manipulować kursorem powłoki, ale jest nieco prostszy/mniej elastyczny
Edit
Po kilku badaniach nad kontrolą terminala i formatowaniem wyjścia, piszę ten gist , który próbuje to osiągnąć. Jak na razie idzie całkiem dobrze
6 answers
Oto zmodyfikowany fragment z mojego dotfiles który powinien robić to, co chcesz
RCol='\e[0m' # Text Reset
# Regular Bold Underline High Intensity BoldHigh Intens Background High Intensity Backgrounds
Bla='\e[0;30m'; BBla='\e[1;30m'; UBla='\e[4;30m'; IBla='\e[0;90m'; BIBla='\e[1;90m'; On_Bla='\e[40m'; On_IBla='\e[0;100m';
Red='\e[0;31m'; BRed='\e[1;31m'; URed='\e[4;31m'; IRed='\e[0;91m'; BIRed='\e[1;91m'; On_Red='\e[41m'; On_IRed='\e[0;101m';
Gre='\e[0;32m'; BGre='\e[1;32m'; UGre='\e[4;32m'; IGre='\e[0;92m'; BIGre='\e[1;92m'; On_Gre='\e[42m'; On_IGre='\e[0;102m';
Yel='\e[0;33m'; BYel='\e[1;33m'; UYel='\e[4;33m'; IYel='\e[0;93m'; BIYel='\e[1;93m'; On_Yel='\e[43m'; On_IYel='\e[0;103m';
Blu='\e[0;34m'; BBlu='\e[1;34m'; UBlu='\e[4;34m'; IBlu='\e[0;94m'; BIBlu='\e[1;94m'; On_Blu='\e[44m'; On_IBlu='\e[0;104m';
Pur='\e[0;35m'; BPur='\e[1;35m'; UPur='\e[4;35m'; IPur='\e[0;95m'; BIPur='\e[1;95m'; On_Pur='\e[45m'; On_IPur='\e[0;105m';
Cya='\e[0;36m'; BCya='\e[1;36m'; UCya='\e[4;36m'; ICya='\e[0;96m'; BICya='\e[1;96m'; On_Cya='\e[46m'; On_ICya='\e[0;106m';
Whi='\e[0;37m'; BWhi='\e[1;37m'; UWhi='\e[4;37m'; IWhi='\e[0;97m'; BIWhi='\e[1;97m'; On_Whi='\e[47m'; On_IWhi='\e[0;107m';
Wtedy możesz po prostu echo -e "${Blu}blue ${Red}red ${RCol}etc...."
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-14 03:17:55
Echo-e "\033 [33; 31m kolor tekstu " - czerwony
Echo-e "\033 [33; 32m kolor tekstu " - zielony
Echo-e "\033 [33; 33m kolor tekstu " - żółty
Echo-e "\033 [33; 34m kolor tekstu " - niebieski
Echo-e "\033[33;35m kolor tekstu " - Magenta
Echo-e "\033[33;30m tekst kolorowy " - Szary
Echo-e "\033 [33; 36m Color Text " - Cyan
Http://techietent.blogspot.in/2013/03/how-to-echo-colored-text-in-linux-shell.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-17 06:39:27
Wziąłem listę demure ' a jako inspirację i trochę z niej Wyschłem. (I zmieniono \e
na szesnastkowe \x1B
, ponieważ ten pierwszy nie jest obsługiwany w Terminalu OS X.aplikacja od Snow Leopard.) Oto co wymyśliłem:
## Colours and font styles
## Syntax: echo -e "${FOREGROUND_COLOUR}${BACKGROUND_COLOUR}${STYLE}Hello world!${RESET_ALL}"
# Escape sequence and resets
ESC_SEQ="\x1b["
RESET_ALL="${ESC_SEQ}0m"
RESET_BOLD="${ESC_SEQ}21m"
RESET_UL="${ESC_SEQ}24m"
# Foreground colours
FG_BLACK="${ESC_SEQ}30;"
FG_RED="${ESC_SEQ}31;"
FG_GREEN="${ESC_SEQ}32;"
FG_YELLOW="${ESC_SEQ}33;"
FG_BLUE="${ESC_SEQ}34;"
FG_MAGENTA="${ESC_SEQ}35;"
FG_CYAN="${ESC_SEQ}36;"
FG_WHITE="${ESC_SEQ}37;"
FG_BR_BLACK="${ESC_SEQ}90;"
FG_BR_RED="${ESC_SEQ}91;"
FG_BR_GREEN="${ESC_SEQ}92;"
FG_BR_YELLOW="${ESC_SEQ}93;"
FG_BR_BLUE="${ESC_SEQ}94;"
FG_BR_MAGENTA="${ESC_SEQ}95;"
FG_BR_CYAN="${ESC_SEQ}96;"
FG_BR_WHITE="${ESC_SEQ}97;"
# Background colours (optional)
BG_BLACK="40;"
BG_RED="41;"
BG_GREEN="42;"
BG_YELLOW="43;"
BG_BLUE="44;"
BG_MAGENTA="45;"
BG_CYAN="46;"
BG_WHITE="47;"
# Font styles
FS_REG="0m"
FS_BOLD="1m"
FS_UL="4m"
Kolory BR_
to kolory "jasne" lub "o wysokiej intensywności". W ten sposób można nawet mieszać je z innymi stylami czcionek. (np. podkreślony jasny biały)
Jeśli chcesz to dodać do zakładek, zrobiłem dla niego streszczenie: https://gist.github.com/ian128K/39a490e5aa8d3bb77a8b
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-28 08:55:26
tput
może obsłużyć więcej niż jest to wskazane na stronie, do której odsyłasz. Wszystko tput
wyświetla znaki, które umieścisz w instrukcji echo
, na podstawie tego, co pojawia się w bieżącej bazie danych terminala termcap/terminfo. Niektóre przykłady:
$ tput setaf 5 | hexdump -C
00000000 1b 5b 33 35 6d |.[35m|
$ tput setaf 17 | hexdump -C
00000000 1b 5b 33 38 3b 35 3b 31 37 6d |.[38;5;17m|
$ tput reset | hexdump -C
00000000 1b 63 1b 5b 3f 31 30 30 30 6c 1b 5b 3f 32 35 68 |.c.[?1000l.[?25h|
Użyjesz go w ten sam sposób, w jaki używasz zmiennej zdefiniowanej w Twoim gist; w rzeczywistości możesz użyć jej do stworzenia twojego gist, w przenośny sposób:
black=$(tput setaf 0)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-26 20:44:29
Bezwstydna wtyczka... sprawdź Rainbow.sh
Użycie
Wystarczy zaimportować rainbow.sh i zacznij korzystać z dostępnych funkcji w swoich skryptach.
source rainbow.sh
vargreen=$(echogreen "Grass is green")
varred=$(echored "Roses are red")
echo "$vargreen ..Crickets are noisy.. $varred"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-19 20:53:52
Osobiście używam ich w moim narzędziu xcol, które opracowałem używając kodu Andreasa Schamanka jako odniesienia.
#normal=$(tput sgr0) # normal text
normal=$'\e[0m' # (works better sometimes)
bold=$(tput bold) # make colors bold/bright
red="$bold$(tput setaf 1)" # bright red text
green=$(tput setaf 2) # dim green text
fawn=$(tput setaf 3); beige="$fawn" # dark yellow text
yellow="$bold$fawn" # bright yellow text
darkblue=$(tput setaf 4) # dim blue text
blue="$bold$darkblue" # bright blue text
purple=$(tput setaf 5); magenta="$purple" # magenta text
pink="$bold$purple" # bright magenta text
darkcyan=$(tput setaf 6) # dim cyan text
cyan="$bold$darkcyan" # bright cyan text
gray=$(tput setaf 7) # dim white text
darkgray="$bold"$(tput setaf 0) # bold black = dark gray text
white="$bold$gray" # bright white text
Używam tych zmiennych w moich skryptach TAK
echo "${red}hello ${yellow}this is ${green}coloured${normal}"
Checkout my xcol tool for ideas and examples
Https://ownyourbits.com/2017/01/23/colorize-your-stdout-with-xcol/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-24 08:29:19