Próbuję wydrukować tekst w terminalu za pomocą polecenia echo.
Chcę wydrukować tekst w kolorze czerwonym. Jak mogę to zrobić?
linux
bash
command-line
echo
terminal-color
satheesh.droid
źródło
źródło
Odpowiedzi:
Możesz użyć tych kodów specjalnych ANSI :
A następnie użyj ich w ten sposób w swoim skrypcie:
który drukuje
love
na czerwono.Z komentarza @ james-lim, jeśli używasz
echo
polecenia, pamiętaj, aby użyć flagi -e, aby umożliwić ucieczki odwrotnym ukośnikiem .(nie dodawaj,
"\n"
gdy używasz echa, chyba że chcesz dodać dodatkową pustą linię)źródło
\e[0;31mHello Stackoverflow\e[0m
echo
aby włączyć ucieczki z odwrotnym ukośnikiem.\x1B
zamiast\e
.\033
byłoby dobrze na wszystkich platformach.for (( i = 30; i < 38; i++ )); do echo -e "\033[0;"$i"m Normal: (0;$i); \033[1;"$i"m Light: (1;$i)"; done
Możesz użyć niesamowitego
tput
polecenia (zasugerowanego w odpowiedzi Ignacio ), aby wygenerować kody kontrolne terminali dla wszystkich rzeczy.Stosowanie
Konkretne
tput
polecenia podrzędne zostały omówione później.Bezpośredni
Wywołaj
tput
jako część sekwencji poleceń:Użyj
;
zamiast,&&
więc jeślitput
błędy nadal pokazują tekst.Zmienne powłoki
Inną opcją jest użycie zmiennych powłoki:
tput
tworzy sekwencje znaków, które są interpretowane przez terminal jako mające specjalne znaczenie. Nie będą się pokazywać. Pamiętaj, że nadal mogą być zapisywane w plikach lub przetwarzane jako dane wejściowe przez programy inne niż terminal.Zastępowanie poleceń
Wygodniejsze może być wstawianie
tput
danych wyjściowych bezpośrednio doecho
łańcuchów za pomocą podstawiania poleceń :Przykład
Powyższe polecenie tworzy to na Ubuntu:
Polecenia dotyczące koloru pierwszego planu i tła
Kolory są następujące:
Istnieją również wersje funkcji ustawiania kolorów inne niż ANSI (
setb
zamiastsetab
isetf
zamiastsetaf
), które używają różnych liczb, których tu nie podano.Polecenia w trybie tekstowym
Polecenia ruchów kursora
Wyczyść i wstaw polecenia
Inne polecenia
Z Compiz chwiejnych okien The
bel
komenda sprawia terminala kołysanie na sekundę do zwrócenia uwagi użytkownika.Skrypty
tput
akceptuje skrypty zawierające jedno polecenie w wierszu, które są wykonywane w kolejności przedtput
zakończeniem.Unikaj plików tymczasowych, wyświetlając echo ciągu wielowierszowego i przesyłając go strumieniowo:
Zobacz też
man 1 tput
man 5 terminfo
pełną listę poleceń i więcej szczegółów na temat tych opcji. (Odpowiednietput
polecenie znajduje się wCap-name
kolumnie ogromnej tabeli rozpoczynającej się od wiersza 81.)źródło
$()
jest to podstawienie polecenia . Wszystko, cotput af 1
robi, to generuje ciąg kodu koloru, ale kody nie są znakami do wydrukowania, więctput af 1
samo wpisanie spowoduje utworzenie pustej linii wyniku.ncurses
tput
kolorów znajduje się w odpowiedzi na Unix StackExchangereset=`tput sgr0`
powinno byćreset=`tput sgr 0`
, ze spacją.niektóre zmienne, których możesz użyć:
znak zmiany znaczenia , odpowiednio , bash , hex i ósemkowy :
krótki przykład:
wyjątek bash:
Jeśli zamierzasz użyć tych kodów w swoich specjalnych zmiennych bash
powinieneś dodać dodatkowe znaki ucieczki, aby grzmotnąćpotrafię je poprawnie interpretować. Bez dodawania dodatkowych znaków ucieczki działa, ale napotkasz problemy podczas
Ctrl + r
wyszukiwania w historii.reguła wyjątków dla bash
Należy dodać
\[
przed każdym początkowym kodem ANSI i dodać\]
po zakończeniu każdego z nich.Przykład:
w regularnym użyciu:
\033[32mThis is in green\033[0m
dla PS0 / 1/2/4:
\[\033[32m\]This is in green\[\033[m\]
\[
służy do rozpoczęcia sekwencji znaków niedrukowalnych\]
jest do końca sekwencji znaków niedrukowalnychWskazówka: aby zapamiętać, możesz najpierw dodać,
\[\]
a następnie umieścić między nimi swój kod ANSI:-
\[start-ANSI-code\]
-
\[end-ANSI-code\]
rodzaj sekwencji kolorów:
Przed nurkowaniem w tych kolorach powinieneś wiedzieć o 4 trybach z tymi kodami:
1. tryb kolorów
Zmienia styl koloru NIE tekstu. Na przykład rozjaśnij lub przyciemnij kolor.
0
Resetowanie1;
lżejszy niż zwykle2;
ciemniejszy niż zwykleTen tryb nie jest szeroko obsługiwany. Jest w pełni obsługiwany na Gnome-Terminal.
2. tryb tekstowy
Ten tryb służy do modyfikowania stylu tekstu NIE w kolorze.
3;
italski4;
podkreślać5;
miga (powoli)6;
miga (szybko)7;
odwrócić8;
ukryć9;
przekreśleniei są prawie obsługiwane.
Na przykład KDE-Konsole obsługuje,
5;
ale Gnome-Terminal nie obsługuje i Gnome obsługuje,8;
ale KDE nie.3. tryb pierwszego planu
Ten tryb służy do kolorowania pierwszego planu.
4. tryb tła
Ten tryb służy do kolorowania tła.
Poniższa tabela pokazuje podsumowanie 3 / 4-bitowej wersji koloru ANSI
Poniższa tabela pokazuje podsumowanie 8-bitowej wersji koloru ANSI
8-bitowy szybki test:
for code in {0..255}; do echo -e "\e[38;05;${code}m $code: Test"; done
Poniższa tabela pokazuje podsumowanie 24-bitowej wersji koloru ANSI
kilka zrzutów ekranu
8-bitowe streszczenie na pierwszym planie w
.gif
8-bitowe streszczenie w tle
.gif
podsumowanie kolorów z ich wartościami
blinking
na terminalu KDEprosty
C
kod, który pokazuje więcejbardziej zaawansowane narzędzie, które opracowałem, aby radzić sobie z tymi kolorami:
zdjęcie w trybie kolorowym
strzał w trybie tekstowym
łączenie jest OK
więcej zdjęć
Wskazówki i porady dla zaawansowanych użytkowników i programistów:
Czy możemy używać tych kodów w języku programowania?
Tak, możesz. Doświadczyłem wgrzmotnąć, do, c ++, re perl, pyton
Czy spowalniają szybkość programu?
Myśle że nie.
Czy możemy ich używać w systemie Windows?
3/4-bit Tak, jeśli skompilujesz kod z
gcc
kilkoma zrzutami ekranu na Win-7
Jak obliczyć długość kodu?
\033[
= 2, pozostałe części 1Gdzie możemy użyć tych kodów?
Wszędzie tam, gdzie ma
tty
tłumaczaxterm
,gnome-terminal
,kde-terminal
,mysql-client-CLI
i tak dalej.Na przykład, jeśli chcesz pokolorować wydruk za pomocą mysql, możesz użyć
Perl
zapisz ten kod w nazwie pliku:
pcc
(= Perl Colorize Character), a następnie umieść plik w poprawnym,PATH
a następnie użyj go w dowolnym miejscu.ls | pcc
df | pcc
wewnątrz
mysql
najpierw zarejestruj go,pager
a następnie spróbuj:Robi NIE obsługuje Unicode.
Czy te kody tylko kolorują?
Nie, potrafią robić wiele interesujących rzeczy. Próbować:
lub:
Jest wielu początkujących, którzy chcą wyczyścić ekran
system( "clear" )
, abyś mógł użyć tego zamiastsystem(3)
połączeniaCzy są dostępne w standardzie Unicode?
Tak.
\u001b
Która wersja tych kolorów jest lepsza?
Jest łatwy w użyciu
3/4-bit
, ale jest bardzo dokładny i piękny w użyciu24-bit
.Jeśli nie masz doświadczenia zHTMLwięc o to szybkie wiczenia:
24 bity oznaczają:
00000000
i00000000
i00000000
. Każdy 8 bitów dotyczy określonego koloru.1..8
jest dla i9..16
dla i17..24
dlaSo inHTML
#FF0000
oznacza i oto on:255;0;0
wHTML
#00FF00
oznacza, że tutaj jest:0;255;0
Czy to ma sens? jaki kolor chcesz połączyć z tymi trzema 8-bitowymi wartościami.
odniesienie: sekwencje specjalne ANSI
Wikipedii tldp.org tldp.org misc.flogisoft.com niektóre blogi / strony internetowe, których nie pamiętam
źródło
x1B[
do jego wyeliminowania.Użyj
tput
zsetaf
możliwością i parametrem1
.źródło
\033[31m
spowoduje uszkodzenie biblioteki readline w niektórych terminalach.i
górną granicę, aby uzyskać więcej odcieni):for (( i = 0; i < 17; i++ )); do echo "$(tput setaf $i)This is ($i) $(tput sgr0)"; done
tput: command not found
(na alpejskim)[31m
Kontroluje kolor tekstu:30
-37
ustawia kolor pierwszego planu40
-47
ustawia kolor tłaPełniejszą listę kodów kolorów można znaleźć tutaj .
Dobrą praktyką jest resetowanie koloru tekstu z powrotem do
\033[0m
końca łańcucha.źródło
Właśnie połączyłem dobre połowy we wszystkich rozwiązaniach i otrzymałem:
Możesz to po prostu nazwać:
źródło
To jest przełącznik kolorów
\033[
. Zobacz historię .Kody kolorów są takie jak
1;32
(jasnozielony),0;34
(niebieski),1;34
(jasnoniebieski) itp.Wypowiedzieć sekwencje kolorów z przełącznikiem kolorów
\033[
i0m
, w żaden kod -Color. Podobnie jak otwieranie i zamykanie kart w języku znaczników.Proste
echo
rozwiązanie funkcji koloru :źródło
text
zmienną wtext="$color${@: 2}${code}0m"
ten sposób, że cała linia oprócz parametru koloru zostanie pokolorowana.Dobrym sposobem na zmianę koloru tylko dla jednego
echo
jest zdefiniowanie takiej funkcji:Stosowanie:
Lub możesz bezpośrednio użyć kodów kolorów wymienionych w odpowiedzi Drew :
źródło
-n
do echa, możesz użyć go jako kolorowania wecho "Red `coloredEcho "fox" red` jumps over the lazy dog"
Służy
tput
do obliczania kodów kolorów. Unikaj używania kodu ucieczkowego ANSI (np.\E[31;1m
Czerwonego), ponieważ jest on mniej przenośny. Na przykład Bash w OS X nie obsługuje tego.źródło
Odpowiedź na to pytanie była wciąż powtarzana :-), ale dlaczego nie.
Pierwsze użycie
tput
jest bardziej przenośne w nowoczesnych środowiskach niż ręczne wstrzykiwanie kodów ASCIIecho -E
Oto funkcja szybkiego bashu:
Teraz możesz użyć:
uzyskać:
Uwagi na temat przenośności
tput
Pierwszy raz
tput(1)
Kod źródłowy po został przesłany we wrześniu 1986 rokutput(1)
był dostępny w semantyce X / Open curses w latach 90. (standard 1997 ma semantykę wymienioną poniżej).Jest więc ( dość ) wszechobecny.
źródło
tput
? Czy jest dostępny na większości serwerów, na których nie ma uprawnień administratora, aby go zainstalować? Czy masz link do miejsca, w którym ta technika została po raz pierwszy „wymyślona”?$PS1
bez elementów nierozstawnych\[...\]
? Nadal używaj znaczników Bash PS1 z ciągami tput.Dzięki @ k-five za tę odpowiedź
Wynik
Mam nadzieję, że ten obraz pomoże Ci wybrać kolor dla twojego bash: D
źródło
Jeśli używasz
zsh
lubbash
Wypróbuj online
źródło
Możemy użyć 24-bitowych kolorów RGB zarówno dla tekstu, jak i tła!
Przykładowy czerwony tekst i tag zamykający:
Generator:
Pokaż fragment kodu
Czy korzystanie z moich skryptów jest bezpieczne?
Tak! Terminale 8 i 16 bitów wyświetlą po prostu kolor zastępczy w zakresie dostępnej palety, zachowując najlepszy kontrast, bez uszkodzeń!
Ponadto nikt nie zauważył przydatności odwróconego wideo ANSI code 7 .
Pozostaje czytelny na wszystkich schematach terminali, na czarnym lub białym tle lub na innych paletach fantazyjnych, poprzez zamianę kolorów pierwszego planu i tła.
Przykład: czerwone tło, które działa wszędzie:
Oto jak wygląda zmiana schematów wbudowanych w terminal:
To jest skrypt pętli używany dla gif.
Zobacz https://en.wikipedia.org/wiki/ANSI_escape_code#SGR_(Select_Graphic_Rendition)_parameters
źródło
Te kody działają na moim pudełku Ubuntu:
Spowoduje to wydrukowanie liter abcd w różnych kolorach:
Dla pętli:
źródło
Znalazłem niesamowitą odpowiedź Shakiby Moshiri , gdy szukałem informacji na ten temat… wtedy wpadłem na pomysł… i uzyskałem całkiem niezłą funkcję, niezwykle łatwą w użyciu 😁
Więc muszę się z tym podzielić 😉
https://github.com/ppo/bash-colours
Zastosowanie:
$(c <flags>)
wewnątrzecho -e
lubprintf
Przykłady:
źródło
Dla czytelności
Jeśli chcesz poprawić czytelność kodu, możesz
echo
najpierw napis, a następnie dodaj kolor, używającsed
:źródło
Jak dotąd moją ulubioną odpowiedzią jest kolorowy Echo.
Aby opublikować inną opcję, możesz sprawdzić to małe narzędzie xcol
https://ownyourbits.com/2017/01/23/colorize-your-stdout-with-xcol/
używasz go tak samo jak grep, i na przykład pokoloruje on stdin innym kolorem dla każdego argumentu
Zauważ, że akceptuje każde wyrażenie regularne, które sed zaakceptuje.
To narzędzie wykorzystuje następujące definicje
Używam tych zmiennych w moich skryptach w taki sposób
źródło
Aby rozwinąć tę odpowiedź , dla leniwych z nas:
źródło
tput
; po to jest!tput
dosc
irc
chociaż (zapisz kursor, przywróć kursor). Chociaż ta odpowiedź nazywa mnie „leniwą”, można ją przeredagować jako „praktyczną” lub „od razu do rzeczy”.aby wyświetlić wyjście komunikatu w innym kolorze, możesz:
źródło
Zdecydowanie powinieneś użyć tput zamiast surowych sekwencji kontrolnych ANSI.
od http://wiki.bash-hackers.org/scripting/terminalcodes
To powiedziawszy, napisałem małą bibliotekę pomocników o nazwie bash-tint , która dodaje kolejną warstwę nad tput, dzięki czemu korzystanie z niej jest jeszcze prostsze (imho):
Przykład:
tint "white(Cyan(T)Magenta(I)Yellow(N)Black(T)) is bold(really) easy to use."
Dałby następujący wynik:
źródło
I zamiast kodowania kodów ucieczkowych, które są specyficzne dla twojego obecnego terminala, powinieneś użyć
tput
.To jest mój ulubiony skrypt demo:
źródło
Używam tego do drukowania w kolorze
Wszystkie podstawowe kolory ustawione jako zmienne, a także kilka przydatnych funkcji: XY, linia i que. Źródło tego skryptu w jednym ze swoich i użyj wszystkich zmiennych kolorów i funkcji.
źródło
I to, co kiedyś widziałem wszystkie kombinacje i zdecydowałem, które brzmi fajnie:
źródło
Napisałem swag, aby to osiągnąć.
Możesz po prostu zrobić
Teraz możesz zainstalować wszystkie polecenia ucieczki jako pliki TXT do danego miejsca docelowego poprzez:
Lub jeszcze łatwiej poprzez:
Które zainstalują kolory
~/.colors
.Albo użyjesz ich w ten sposób:
Lub w ten sposób, który wydaje mi się bardziej interesujący:
Sprawdź to na asciinema !
źródło
Oto prosty, mały skrypt, który ostatnio przygotowałem, który pokoloruje wszelkie dane wejściowe w potoku zamiast używania „Toalety”.
File: color.bsh
Następnie nazwij to kolorem czerwonym (196):
$> echo "text you want colored red" | color.bsh 196
źródło
Odnosić się do:
źródło
Oto najprostsze i czytelne rozwiązanie. W przypadku bashj ( https://sourceforge.net/projects/bashj/ ) wystarczy wybrać jedną z tych linii:
256x256x256
kolory są dostępne, jeśli masz obsługę kolorów w aplikacji terminalowej.źródło
po zmieszaniu innych rozwiązań z wątku oto, jak udało mi się uzyskać kolory na
npm scripts
wydruku (gitbash CLI):źródło
Podobnie jak coś trochę tam, przejście przez grep podświetli go na czerwono (ale tylko na czerwono). Możesz także użyć nazwanych potoków, aby łańcuch był bliżej końca linii:
źródło
Ta odpowiedź jest poprawna, z tym wyjątkiem, że wezwanie do kolorów nie powinno znajdować się w cudzysłowie.
Powinien załatwić sprawę.
źródło
echo -e '\e[0;31mHello Stackoverflow\e[0m'
. Tak samo jest z bash.